2011-08-03 384 views
1

我有两个需要在PowerShell中执行的命令。其他一切都可以在批处理中下载。我可以在PowerShell中编写整个东西,但我必须确保执行策略设置正确,这可能是我们在这些服务器上的netadmins的安全问题。Powershell需要执行两行

在我的批处理脚本,我需要:

  1. 打倒IIS应用程序缓存(我可以用APPCMD)
  2. 从服务器上下载一个新的zip文件(使用我wget的版PowerShell的)
  3. 删除www目录
  4. 解压在www目录
  5. 的zip文件中的所有旧文件调出IIS应用程序缓存。

在第2步,我的两个PowerShell命令是:

$client = new-object System.Net.WebClient 
$client.DownloadFile("http://path/to/file", "file.name") 

有没有一种方法可以让我这两条线合并成一个单一的PowerShell命令,就像使用分号在Unix上的方式,我可以?我试图把两线之间的分号,并得到了以下错误:

Missing ')' in method call. 
At line:1 char:62 
+ $client.DownloadFile( <<<< http://path/to/file) 
    + CategoryInfo   : ParserError: (CloseParenToken:TokenId) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall 

然而,所谓的“wget.ps1”实际PowerShell脚本里面,它执行与此:

$ powershell -c wget.ps1 

回答

0

你可以这样做:

(new-object System.Net.WebClient).DownloadFile("http://path/to/file", "file.name") 
+0

我明白了!我花了一段时间才明白你在做什么,你一直在创建对象并且一次调用方法,整洁的把戏,我决定把所有的东西写出来Powershell,并且作为我的过程的一部分,改变了执行策略,整件事情没有任何意义:如果默认情况下我不能执行脚本,Powershell这样强大的语言如何使用批处理,如果我可以简单地执行DOS命令行来改变策略,为什么要打扰? –

+0

令人沮丧和令人沮丧的(sp)是我将如何描述我的执行策略的经验,esp当包含远程脚本时,获得它的工作是很好的,但有很多与PS。 – Matt

+0

请注意$(...)类型的查询。它类似于(..)在答案中使用的类型。最好的,亚光 – Matt

1

那么你至少有两个选择。首先是在运行脚本时定义执行策略。这只是改变了你蹬掉了一个会话策略:

powershell.exe -File 'C:\Path\To\File.ps1' -ExecutionPolicy RemoteSigned 

或者你也可以通过直接在命令:

powershell.exe -command {$string = 'bobdee';$client.DownloadFile("http://path/to/file", "file.name")} 
+0

把花括号看起来没有任何作用。我用'{foo =“$ bar”;写输出“Bar = $ bar”}'尝试了它,它只是回应了命令。我只用了双引号:'“foo ='bar'; echo $ foo''我试着看看能不能找到一个转义字符,但是不能。第一种方法,试图覆盖执行策略没有工作 –

0

2013更新:

我不确定'11年的情况如何,但是现在您可以在PowerShell中执行以下操作:

wget "http://path/to/file" -outfile "file.name" 
+0

它结束了,这是PS 1.0,甚至没有PS 2.0。这是我的问题之一。无论如何,我最终都是在PowerShell中编写完整的东西。这并不难,如果我熟悉PowerShell,可能会更容易。 –