运行"调用表达"声明为另一个用户

时间:2014-10-09 05:18:44

标签: powershell dsc

我有一个PowerShell脚本/函数,只需要很少的参数并运行它。

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

现在我想以另一个用户身份运行它。

Invoke-Expression没有固有参数credential来促进这一点。另一方面,Invoke-Command具有CredentialGet-Credential)参数,便于以其他用户身份运行。我尝试用Invoke-Expression替换Invoke-Command但没有运气。

如何处理此问题以将上述表达式作为另一个用户运行?

脚本资源的结构。

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。:所有这些都发生在所需状态配置中Script用户的SetScript内。

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

我认为你不能。要在不同的安全上下文下运行命令,您必须在以这些凭据运行的会话中执行此操作。

如果查看Invoke-Command的参数集,则Credential参数仅在指定另一台计算机或URI的参数集中可用(这将导致创建新会话)。 FilePathRunspace和InSession参数集将导致在本地会话中调用该命令,并且没有Credential参数。

同样,Invoke-Command将在本地会话中运行该命令并且没有Credential参数,因为一旦为会话建立了安全上下文,您就无法更改安全上下文