本地和遠程機器都啓用了PSSession。我的本地PowerShell腳本如何調用遠程PowerShell腳本?
我想我的問題是,我不知道如何將傳入的字符串轉換爲ScriptBlock以供Invoke-Command使用。我可以使用Enter-PSSession在交互式會話中調用所有這些命令。
我的本地腳本在腳本塊中調用遠程腳本。我通過文件名和路徑在命令行中使用本地
& -p」 \ CallRemote.ps1' 。 「E:\ DeployFolder \腳本\」 -f 「hello.ps1」
本地腳本看起來像這樣
Param(
[parameter(Mandatory=$true)]
[alias("p")]
$ScriptPath,
[parameter(Mandatory=$true)]
[alias("f")]
$Scriptfile)
if ($ScriptPath[$ScriptPath.Length - 1] -eq '\')
{
$ScriptBlock = $ScriptPath + $Scriptfile
}
else
{
$ScriptBlock = $ScriptPath + '\' + $Scriptfile
}
$appserver = "someurl.com"
$pw = convertto-securestring -AsPlainText -Force -String "password"
$cred = new-object -typename System.Management.Automation.PSCredential -$argumentlist "domain\svc.account",$pw
#initiate remote session for deployment
$session = New-PSSession -ComputerName $appserver -Credential $cred -Name test_remote
#call remote script
Invoke-Command -Session $session -ScriptBlock { $ScriptBlock}
Remove-PSSession -Name test_remote
如果我硬編碼路徑和文件名前面加上一個「&」它的工作原理。我發現沒有辦法讓這個工作沒有硬編碼。
這種特殊的硬編碼工作 Invoke-Command -Session $session -ScriptBlock { & "E:\DeployFolder\Scripts\hello.ps1"}
這些嘗試在改變進字符串的文件和路徑悄悄地失敗,調用命令-Session $會議-ScriptBlock {$腳本塊}
- $腳本塊= 「
&
'」 + $了ScriptPath + '\' + $腳本文件+ 「''」 - $腳本塊= 「&
' " + $ScriptPath + '\' + $Scriptfile + "
「」 - $腳本塊=「$了ScriptPath + '\' + $腳本文件
這只是失敗右出 Invoke-Command -Session $session -ScriptBlock { & $ScriptBlock}
與錯誤消息:在管道元件
表達後 '&' 產生一個無效的 對象。它必須導致命令名稱,腳本塊或CommandInfo對象。 + CategoryInfo:InvalidOperation:(:) [],的RuntimeException + FullyQualifiedErrorId:BadExpression
這太安靜地失敗了。 – Blanthor
@Blanthor:更新後 - 我想我看到你的變量範圍有問題。 –
我是Powershell的新手我嘗試聲明var $ ScriptBlock並引發異常。 – Blanthor