2012-03-29 17 views
0

我有以下批處理腳本在Windows 2008 R2服務器上:批處理腳本運行正常;但如果通過PowerShell遠程執行失敗

@echo off 
djoin.exe /provision /domain my.domain.com /machine test /savefile savefile.txt 
echo %ERRORLEVEL% 

如果我運行在服務器上的腳本,無論是通過命令提示符或PowerShell,它工作得很好,並返回「0」。

的問題是,我需要從遠程計算機上執行,所以我做了以下(一個例子只是用於測試):

Invoke-Command -ComputerName remotehost -ScriptBlock {.\script.cmd} 

輸出爲「-1073740940」,這可能是錯誤代碼C0000374,這可能與堆損壞有關。

這似乎是djoin命令本身的問題。我可以註釋掉djoin並運行其他二進制文件,比如ping,沒有使用相同Invoke-Command的問題。

請記住,腳本在目標計算機上從PowerShell執行時工作得很好,那麼遠程處理的行爲會引入什麼問題?

在這兩種情況下,腳本都使用我的帳戶(它是Domain Admins的成員)具有相同的權限執行。我懷疑這是一個權限問題,不知道還有其他地方需要注意。

放棄了整件事情。這可能是djoin中的錯誤,也可能是djoin和PS遠程處理之間的交互中的一些模糊問題。

我設法直接在客戶端上運行djoin,使用'runas/netonly ...'來提供域憑據。這是一個非常混亂的解決方案(我還沒有弄清楚如何獲得由runas啓動的進程的退出狀態),但是完成了工作。

+0

執行命令 - 計算機遠程主機-ScriptBlock {djoin.exe/provision/domain my.domain.com/machine test/savefile savefile.txt; $ LASTEXITCODE}'做什麼不同?換句話說:爲什麼你需要批處理文件? – Joey 2012-03-29 13:28:02

+0

以完全相同的方式失敗。批處理文件出現在我沒有了解如何運行djoin.exe的所有其他想法時。例如,運行「djoin.exe /?」,例如,工作得很好,我得到的使用情況輸出。但是這個命令用於在活動目錄中預置計算機帳戶,這是失敗的主要操作。 – VokinLoksar 2012-03-29 14:28:49

+0

好吧,但這不是批處理文件,而是PowerShell遠程處理環境,它以某種方式阻止'djoin'做它應該做的事情。 – Joey 2012-03-29 14:45:06

回答

0

這幾乎肯定是一個經典的「雙跳」身份驗證問題。請記住,當您使用PowerShell遠程時,您正在使用其中一個躍點。在遠程機器上執行的任何訪問第三臺遠程機器的任何操作都不可能在需要驗證的情況下起作用。

爲了解決這個問題,您可以使用一種身份驗證方法,該方法允許您使用CredSSP等代理憑證代替。這比簡單地更改身份驗證類型涉及更多,因爲您必須在事務的服務器端對客戶端進行更改。請參閱MSDN上的這篇博客帖子,PowerShell Remoting and the 「Double-Hop」 Problem和這個「嗨,腳本專家!」後,Enable PowerShell "Second-Hop" Functionality with CredSSP

相關問題