2011-04-19 148 views
2

我需要在遠程計算機上運行PS腳本,正如下面的代碼所做的那樣。使用PSTool在遠程計算機上運行PowerShell腳本

Process psExecer = new Process 
      { 
       StartInfo = 
       { 
        UseShellExecute = false, 
        CreateNoWindow = false, 
        WindowStyle = ProcessWindowStyle.Hidden, 
        FileName = @"c:\PsTools\PsExec.exe", 
        Arguments = @"c:\windows\System32\cmd.exe /k c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe E:\Scripts\SetUP.ps1 -u super -p Pass -s"   
       } 
      }; 

      psExecer.Start(); 
      psExecer.WaitForExit(); 
      Thread.Sleep(5000); 

問題是腳本有一些共享點cmdlet,它必須加載共享點PSSnapin。僅當腳本在Powershell的64位映像中運行時腳本才能正常運行。

當我嘗試使用PSTool運行時,即使當我明確提到代碼中顯示的路徑時,PSTool始終會從%windir%\ SysWoW64文件夾中調用32位PowerShell。

爲什麼會這樣,該如何解決我的問題

問候, 哎呀

+0

只是好奇,但爲什麼你加載'cmd'然後得到它加載'powershell',而不是直接運行'powershell'? – 2011-04-19 10:35:43

+0

試過直接加載powershell給出了同樣的錯誤,所以嘗試使用cmd加載這並沒有多大用處 – JeeZ 2011-04-19 10:43:50

+0

我假設它是一個錯字,但是你聲明你需要運行64位版本的powershell,但是然後從' System32'。你可以更新你的問題,以確保沒有混淆......? – 2011-04-19 10:50:09

回答

2

當32位應用程序引用C:\ System32下它重定向到SYSWOW64

嘗試\ WINDOWS使用c:\​​ windows \ sysnative \ windowspowershell \ v1.0 \ powershell.exe

+0

Jako你是對的,我正面臨這個問題,因爲PsTool是一個32位應用程序,因此總是調用32位PowerShell。感謝信息。 – JeeZ 2011-04-20 04:39:48

1

您調用的問題是由於UAC導致的進程虛擬化的副作用。

這裏有三種解決方法:

1.在目標計算機上刪除UAC

2. WinRM的

如果你想在目標上遠程執行PowerShell腳本,如Windows 2008 R2和Windows 7,最好的方法是使用WSMan,只需看看about_Remote幫助在PowerShell中。

3.嘗試在你的遠程計算機

上調用爲了防止虛擬化,在同一目錄中您要刪除虛擬化的EXE文件中添加清單過程中刪除虛擬化。清單是名爲yourexename.exe.manifest的XML文件。 You can find in this site a manifest sample。嘗試將requestedPrivileges設置爲asInvoker

相關問題