我已經找了幾個星期,並有其他人研究/ /我,但我還沒有找到答案。遠程服務器上執行遠程PowerShell腳本
我有一個腳本,位於服務器1上,需要使用某些憑據在服務器1上執行。最終的解決方案將有助於解密文件。該腳本必須作爲特定用戶在特定服務器上執行,因爲密鑰對位於該服務器上的用戶密鑰環中。
我希望從服務器2調用腳本作爲更大進程的一部分。服務器2具有它具有以下流SQL作業:
- 步驟的作業1使用PowerShell腳本下載
- 工作的第2步需要執行服務器上的1腳本解密文件文件(**這是我在這裏談論的步驟)
- 作業的第3步將運行powershell腳本來檢查文件屬性(上次寫入日期,與昨天相比的文件大小等)
- 步驟4的作業將恢復日誌文件
服務器1上的腳本在本地運行時沒有任何問題,併產生預期的結果。當試圖讓服務器2在服務器1上執行腳本時,我沒有取得任何成功。爲了儘可能簡單地找出哪些實際上不起作用,我想出了一套簡單的腳本(見下文)。
- 當我在服務器1上運行腳本1(文件在物理上存在的位置)時,它的 工作正常。文本文件由文件中的「hello world」生成。
- 當我在服務器2上運行腳本2(我沒有保存文件, 只是在ISE窗口中運行它),它運行時沒有錯誤或警告, 但應寫入的文件不存在服務器1(也不在 服務器2 - 不是它應該但我檢查無論如何)。
我不是任何類型的PowerShell導師 - 所以我現在很抱歉,如果這是一個非常明顯的事情。 :)
#-------------------------------------
# script 1
# this script lives on server 1
# file name: c:\deleteme\helloworld2.ps1
$CMD = Invoke-Expression " `"hello world`" >> C:\deleteme\helloworld.txt"
Invoke-Command -ScriptBlock { $CMD }
#-------------------------------------
# script 2
# this script is executed on server 2 and attempts to execute the script on server 1
$session = New-PSSession -ComputerName "SERVER01.lahcg.com" #-Credential $username
$CMD = "Invoke-Command -ScriptBlock { powershell.exe `"C:\deleteme\helloworld2.ps1`" } "
#write-output $CMD
Invoke-Command -Session $session -ScriptBlock { $CMD }
Remove-PSSession $session
環境信息:
- 服務器1:在Windows Server 2008 R2標準使用PowerShell 2
- 服務器2:在Windows Server 2012 R2數據中心使用PowerShell 4
額外筆記
- 我確實有啓用遠程設置好了......我在研究之前發現了這一點。
- 我使用不同版本的Powershell,但由於服務器1上的腳本本地運行正常,因此我不認爲這是一個問題。
- 我已經獲得憑證部分來處理另一個腳本 - 所以我不在此帖中詢問。我把它留在腳本中,註釋掉以供參考。
'調用命令-Session $會議-ScriptBlock {使用調用-表達$:CMD}' – BenH
我做了這一變化,並在服務器1中的腳本沒有執行(不創建的文本文件)。我必須爲invoke-expression部分添加雙引號才能工作,但這不應改變您所談論的內容。它成功運行且沒有錯誤,但文本文件未創建。 –