2014-10-09 53 views
0

我有一個PowerShell腳本/函數,它只需要很少的參數並運行它。作爲另一個用戶運行「Invoke-Expression」語句

Invoke-Expression ".\ScriptFile.ps1 $($Node.Name).xml C:\TempFolder\ $($Node.Name) local" 

現在我想運行的其他用戶。

Invoke-Expression沒有固有的參數credential,這有利於此。另一方面,Invoke-Command具有便於作爲另一用戶運行的CredentialGet-Credential)參數。我試圖用Invoke-Command代替Invoke-Expression,但沒有運氣。

我該如何解決這個問題以作爲另一個用戶運行上述表達式?

腳本資源的結構。

Script Deploy 
     {  
      SetScript =  
@"    
       Set-Location D:\Deploy 
       Invoke-Expression ".\ScriptFile.ps1 $($Node.Name).xml C:\TempFolder\ $($Node.Name) local"            
"@ 

      TestScript = 
      { 
       return $false    
      } 
      GetScript = { 
       return @{ 
         GetScript = $GetScript 
         SetScript = $SetScript 
         TestScript = $TestScript 
        } 
      } 
      DependsOn = "[File]CopyMe" 
     } 

P.S .:所有這些都發生在用戶處於期望狀態配置中的SetScript中。

+2

定義「沒有運氣」。你的'Invoke-Command'語句是什麼樣的?你有錯誤嗎? – 2014-10-09 06:39:44

+0

這是我的錯誤消息'PowerShell提供程序MSFT_ScriptResource未能執行Set-TargetResource功能,並顯示錯誤消息: 無法使用指定的命名參數解析參數集。「# – Learner 2014-10-09 07:23:38

+2

請使用**'Invoke-Command'語句更新您的問題* *和**完整的錯誤信息**。 – 2014-10-09 08:12:01

回答

1

Invoke-Command的確可以用來運行在本地計算機上的腳本爲不同的用戶(如@mjolinor說,這將是一個不同的會話)。您必須啓用PowerShell遠程功能(如果您使用DSC,您幾乎可以肯定會這樣做)。該命令是這樣的(假設你的上面調用的翻譯版本):

Invoke-Command -ComputerName . -Credential $cred -File .\ScriptFile.ps1 -ArgumentList "$($Node.Name).xml","C:\TempFolder",$Node.Name,"local" 

我懷疑這不會解決你的問題,但。您評論中的錯誤信息只是一個通用錯誤,這意味着出了問題。要獲得更多線索,您應該查看xDscDiagnostics PowerShell Module以幫助進行故障排除。

但是,如果你能告訴我們你最終想做什麼,那將是一件好事。什麼\ ScriptFile.ps1 實際上做

1

我不認爲你可以。爲了在不同的安全上下文下運行該命令,您必須在以這些憑據運行的會話中執行該命令。

如果您查看Invoke-Command的參數集,則Credential參數僅在指定另一臺計算機或URI(這將導致創建新會話)的參數集中可用。 FilePathRunspace和InSession參數集將導致在本地會話中調用該命令,並且沒有Credential參數。

同樣,Invoke-Command將在本地會話中運行該命令並且沒有Credential參數,因爲一旦爲會話建立了安全上下文後就無法更改它。

相關問題