我有一个Windows服务,通过WsManConnectionInfo
/ 定期在远程计算机上运行PowerShell脚本RunspaceFactory
(遵循本文中的步骤:使用C#在PowerShell中远程执行命令):
var connectionInfo = new WSManConnectionInfo(false, server, 5985, "/wsman",
"http://schemas.microsoft.com/powershell/Microsoft.PowerShell",
cred)
{
OperationTimeout = 4*60*1000,
OpenTimeout = 1*60*1000
};
using (var runSpace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runSpace.Open();
using (var p = runSpace.CreatePipeline())
{
p.Commands.AddScript(script);
var output = p.Invoke();
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用管理员帐户运行Windows服务,一切都很好.但是,如果我使用LocalSystem帐户运行该服务,我会得到以下异常;
System.Management.Automation.Remoting.PSRemotingTransportException:
Connecting to remote server NOSRVDEV02 failed with the following error message :
WinRM cannot process the request. The following error with
errorcode 0x8009030d occurred while using Negotiate authentication:
A specified logon session does not exist. It may already have been terminated.
Possible causes are:
-The user name or password specified are invalid.
-Kerberos is used when no authentication method and no user name are specified.
-Kerberos accepts domain user names, but not local user names.
-The Service Principal Name (SPN) for the remote computer name and port does not exist.
-The client and remote computers are in different domains and there is no trust between the two domains.
After checking for the above issues, try the following:
-Check the Event Viewer for events related to authentication.
-Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport.
Note that computers in the TrustedHosts list might not be authenticated.
-For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.
at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
at System.Management.Automation.Runspaces.Internal.RunspacePoolInternal.EndOpen(IAsyncResult asyncResult)
at System.Management.Automation.RemoteRunspace.Open()
...
Run Code Online (Sandbox Code Playgroud)
注意:这与凭据无关WSManConnectionInfo
- 只是服务属性"登录"选项卡中的帐户设置.
我不想给予服务管理员权限.任何想法为什么LocalSystem用户无法登录?
附加信息:
TrustedHosts
).编辑:更多信息(评论摘要):
Sph*_*xxx 25
一个相当令人惊讶的解决方案:PSCredential
object(cred
)中的用户名需要以无域远程计算机的名称为前缀,例如" MYREMOTESERVERNAME\remoteusername "而不仅仅是" remoteusername ".
我不知道为什么只有在与LocalSystem帐户连接时才需要前缀...
归档时间: |
|
查看次数: |
7878 次 |
最近记录: |