Powershell服务帐户密码更改登录失败

Mav*_*ick 7 powershell powershell-2.0

我正在尝试使用powershell脚本,允许我更改运行特定服务的用户帐户和密码.

$account="domain\account"
$password="password"

$svc=gwmi win32_service -filter "name='MyService'"
$svc.change($null,$null,$null,$null,$null,$false,$account,$password,$null,$null,$null)
Run Code Online (Sandbox Code Playgroud)

我可以检查帐户是否已更改,但是当我尝试从Service.msc GUI运行该服务时,它会因登录失败而失败.

如果我用来从脚本本身启动服务,我会收到以下错误.

$svc.StartService()



__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 0
PSComputerName   :

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 15
PSComputerName   :
Run Code Online (Sandbox Code Playgroud)

根据微软的说法,这是一个登录错误:返回值15.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384901%28v=vs.85%29.aspx

我已经验证了密码数百万次,当我使用GUI复制并粘贴密码时,它才能正常工作.

可能是我在脚本中遗漏了一些东西.(SecurityPolicy在此计算机上不受限制)

Adi*_*bar -1

我怀疑您的密码可能至少有一个在内插字符串中具有特殊含义的字符。尝试单引号:

$password='password'
Run Code Online (Sandbox Code Playgroud)

一般来说,默认情况下使用单引号是一个更好的习惯,只有当您特别想要插入某些内容时才使用双引号。

顺便说一句,还要验证您使用的服务名称是否正确。您需要使用 Name 属性而不是 DisplayName。按照提示尝试gwmi win32_service -filter "name='MyService'"并确保不会返回错误。不过,这可能是单引号与双引号的问题。