2017-02-15 365 views
0

我希望將命令直接存儲在腳本中的變量中,然後在腳本中稍後調用相同的命令。Powershell:在腳本中將整個命令保存到變量中

我試圖做這樣的:

$command = Invoke-Command -ComputerName $Computer -Credential $Credential -ScriptBlock{(Get-CimInstance Win32_SoftwareFeature -Filter "productname LIKE 'Microsoft SQL Server% %Setup (English)'").ProductName} 
Invoke-Expression $command 

問題與該方法是第一次劇本遇到的代碼的第一行,它試圖運行該代碼。當時在腳本中,我還沒有分配剩餘變量

這是特別的問題,我試圖在腳本中運行PSExec。我有大約10個命令,我想將其包裝到變量中,然後在腳本的各個點中調用。

$CreateSymbolicLink = .\PsExec\PsExec.exe \\$computer -u username -p password -accepteula -h -i 1 cmd "/c mklink /D C:\Applications \\server\Share" 

Invoke-Expression $CreateSymbolicLink 

但當劇本從一開始運行時,它實際運行PSEXEC當變量尚未確定,這我試圖避免它這樣。

我該如何做到這一點?我嘗試過使用Set-Variable cmdlet,但似乎也運行該命令,而不是我希望它執行的操作。

+0

'$ command = {Invoke-Command -ComputerName $ Computer -Credential $ Credential -ScriptBlock {(Get-CimInstance Win32_SoftwareFeature -Filter「productname LIKE'Microsoft SQL Server%%Setup(English)'」)。ProductName}'and '&$命令'。 – PetSerAl

回答

0

分配這樣的變量照例:

$a = { 
#script block code 
(Get-CimInstance Win32_SoftwareFeature -Filter "productname LIKE 'Microsoft SQL Server% %Setup (English)'").ProductName 
} 

然後

Invoke-Command -ComputerName $Computer -Credential $Credential -ScriptBlock $a 

另一種方法,是,它包都成一個變量本身,與上述類似:

$command = { 
Invoke-Command -ComputerName $Computer -Credential $Credential -ScriptBlock{(Get-CimInstance Win32_SoftwareFeature -Filter "productname LIKE 'Microsoft SQL Server% %Setup (English)'").ProductName} 
} 

像這樣調用它:

& $command 

第一個示例對於可以多次部署的不同環境更爲有利,特別是在類似於Octopus Deploy的情況下,通過觸角在多臺機器上運行腳本塊,就是這樣一個想到的例子。

+0

這是完美的!非常感謝! :) 爲了達到我的目的,我可能會使用這兩種格式,但爲了運行PSExec,我將使用第二種方法發佈,其中整個命令被封裝到一個變量中,然後使用&符號調用。 –

相關問題