是否有人有Powershell脚本来更改Windows服务使用的凭据?用于更改服务帐户的Powershell脚本
回答
位 - 使用WMI。
$service = gwmi win32_service -computer [computername] -filter "name='whatever'"
$service.change($null,$null,$null,$null,$null,$null,$null,"[email protected]")
在过滤器中正确更改服务名称;适当地设置远程计算机名称。
只是关于这个答案的说明。如果您想更新用户帐户,则需要更新前面的密码值。即$ service.change($ null,$ null,$ null,$ null,$ null,$ null,“。\ MyAccount”,“P @ ssw0rd”)。看来你总是需要在帐户名称前加上域名或“。\”,否则它将无法工作。有关其他参数的更多信息,请参阅此处:http://msdn.microsoft.com/en-us/library/windows/desktop/aa384901(v=vs.85).aspx – Rohland 2012-06-19 10:25:59
此外,请查看我的答案以下使用此之前。服务帐户更改需要重置服务才能生效,并且包含示例代码。 – 2012-09-12 15:59:56
考虑到whithin这个类:
$class=[WMICLASS]'\\.\root\Microsoft\SqlServer\ComputerManagement:SqlService'
有一个名为方法setserviceaccount()
,可能是这个script会做你想要的:更容易
# Copyright Buck Woody, 2007
# All scripts provided AS-IS. No functionality is guaranteed in any way.
# Change Service Account name and password using PowerShell and WMI
$class = Get-WmiObject -computername "SQLVM03-QF59YPW" -namespace
root\Microsoft\SqlServer\ComputerManagement -class SqlService
#This remmed out part shows the services - I'll just go after number 6 (SQL
#Server Agent in my case):
# foreach ($classname in $class) {write-host $classname.DisplayName}
# $class[6].DisplayName
stop-service -displayName $class[6].DisplayName
# Note: I recommend you make these parameters, so that you don't store
# passwords. At your own risk here!
$class[6].SetServiceAccount("account", "password")
start-service -displayName $class[6].DisplayName
我创建一个文本文件“changeserviceaccount.ps1”包含以下脚本:
$account="domain\user"
$password="passsword"
$service="name='servicename'"
$svc=gwmi win32_service -filter $service
$svc.StopService()
$svc.change($null,$null,$null,$null,$null,$null,$account,$password,$null,$null,$null)
$svc.StartService()
我一个窗口服务的开发过程中使用这种由生成后命令行的一部分:
Visual Studio中:项目属性\生成事件
预生成事件命令行:
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe" myservice.exe /u
生成后事件命令行:
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe" myservice.exe
powershell -command - < c:\psscripts\changeserviceaccount.ps1
我写了PowerShell中改变用户名,密码功能,并重新启动远程计算机上的服务(你可以使用localhost,如果你想改变本地服务器)。我已经使用这个数字服务帐户密码在数百台服务器上重置。
您可以在http://www.send4help.net/change-remote-windows-service-credentials-password-powershel-495
它还等待,直到该服务完全停止尝试再次启动它,不像其他的答案中寻找的原件及复印件。
Function Set-ServiceAcctCreds([string]$strCompName,[string]$strServiceName,[string]$newAcct,[string]$newPass){
$filter = 'Name=' + "'" + $strServiceName + "'" + ''
$service = Get-WMIObject -ComputerName $strCompName -namespace "root\cimv2" -class Win32_Service -Filter $filter
$service.Change($null,$null,$null,$null,$null,$null,$newAcct,$newPass)
$service.StopService()
while ($service.Started){
sleep 2
$service = Get-WMIObject -ComputerName $strCompName -namespace "root\cimv2" -class Win32_Service -Filter $filter
}
$service.StartService()
}
这里的其他脚本略有不同,如下所示。这将为给定登录帐户下运行的任何/所有服务设置凭据。它只会尝试在服务已经运行的情况下重新启动服务,以便我们不会意外启动因某种原因而停止的服务。该脚本必须运行并提升shell(如果脚本开始告诉你关于ReturnValue = 2
,你可能运行它未升级)。一些有用的例子是:在运行
所有服务作为当前登录的用户,在本地主机上:
.\set-servicecredentials.ps1 -password [email protected]
所有服务运行的用户:
somedomain\someuser
主机somehost.somedomain
:.\set-servicecredentials.ps1 somehost.somedomain somedomain\someuser [email protected]
集-ServiceCredentials.ps1:
param (
[alias('computer', 'c')]
[string] $computerName = $env:COMPUTERNAME,
[alias('username', 'u')]
[string] $serviceUsername = "$env:USERDOMAIN\$env:USERNAME",
[alias('password', 'p')]
[parameter(mandatory=$true)]
[string] $servicePassword
)
Invoke-Command -ComputerName $computerName -Script {
param(
[string] $computerName,
[string] $serviceUsername,
[string] $servicePassword
)
Get-WmiObject -ComputerName $computerName -Namespace root\cimv2 -Class Win32_Service | Where-Object { $_.StartName -eq $serviceUsername } | ForEach-Object {
Write-Host ("Setting credentials for service: {0} (username: {1}), on host: {2}." -f $_.Name, $serviceUsername, $computerName)
$change = $_.Change($null, $null, $null, $null, $null, $null, $serviceUsername, $servicePassword).ReturnValue
if ($change -eq 0) {
Write-Host ("Service Change() request accepted.")
if ($_.Started) {
$serviceName = $_.Name
Write-Host ("Restarting service: {0}, on host: {1}, to implement credential change." -f $serviceName, $computerName)
$stop = ($_.StopService()).ReturnValue
if ($stop -eq 0) {
Write-Host -NoNewline ("StopService() request accepted. Awaiting 'stopped' status.")
while ((Get-WmiObject -ComputerName $computerName -Namespace root\cimv2 -Class Win32_Service -Filter "Name='$serviceName'").Started) {
Start-Sleep -s 2
Write-Host -NoNewline "."
}
Write-Host "."
$start = $_.StartService().ReturnValue
if ($start -eq 0) {
Write-Host ("StartService() request accepted.")
} else {
Write-Host ("Failed to start service. ReturnValue was '{0}'. See: http://msdn.microsoft.com/en-us/library/aa393660(v=vs.85).aspx" -f $start) -ForegroundColor "red"
}
} else {
Write-Host ("Failed to stop service. ReturnValue was '{0}'. See: http://msdn.microsoft.com/en-us/library/aa393673(v=vs.85).aspx" -f $stop) -ForegroundColor "red"
}
}
} else {
Write-Host ("Failed to change service credentials. ReturnValue was '{0}'. See: http://msdn.microsoft.com/en-us/library/aa384901(v=vs.85).aspx" -f $change) -ForegroundColor "red"
}
}
} -Credential "$env:USERDOMAIN\$env:USERNAME" -ArgumentList $computerName, $serviceUsername, $servicePassword
我不能在默认的PS堆栈发现了什么,我发现它在Carbon
实施:
- 1. 更改的服务器帐户和php脚本不再有效
- 2. 验证服务帐户Powershell
- 3. 在Google dataproc上更改服务帐户
- 4. 更改服务帐户密码
- 5. 如何使用powershell脚本更改clearcase_albd帐户域名和加密密码?
- 6. 更改服务使用的帐户的密码
- 7. 如何更改使用PowerShell脚本
- 8. Powershell更改SQL Server的备份脚本
- 9. 如何将mongodb导出的powershell命令行更改为Powershell脚本(用于计划的任务目的)
- 10. C#GMAIL API服务帐户修改 - unauthorized_client
- 11. 如何更改与sql服务器配合的帐户
- 12. IIS管理员可以更改Windows服务帐户的密码
- 13. Powershell脚本更新多台服务器上的DNS
- 14. MS Exchange服务器SMTP名PowerShell脚本
- 15. PowerShell脚本重新启动服务
- 16. PowerShell脚本for Windows服务器
- 17. 将MS SQL Reporting服务帐户更改为内置的“网络服务”
- 18. 用于合并客户帐户的SQL脚本
- 19. PowerShell脚本来更改桌面
- 20. Powershell脚本来更改字体文档
- 21. 使用powershell,我如何授予“登录为服务”帐户?
- 22. Azure-Powershell在存储帐户上启用文件服务加密
- 23. 如何更改WOS2身份服务器中的用户名(帐户)?
- 24. 通过更改令牌在登录的用户帐户下启动服务
- 25. 在Google Apps脚本HTML服务中切换帐户
- 26. C#如何禁用本地用户帐户的交互式登录。类似于网络服务帐户
- 27. 如何为计算机上的所有用户帐户运行PowerShell脚本?
- 28. 用脚本更改用户shell?
- 29. Team Foundation Server 2010在服务帐户密码更改后中断
- 30. 调试SQL Server 2008存储过程更改SQL服务帐户
您可以删除奖励问题文本吗?我注意到你单独发布了。让我们不要混淆人们,并让答案走错了地方。 – halr9000 2008-11-24 13:35:07
[使用`sc.exe`](http://stackoverflow.com/q/308298/1394393)也是一个选项。 – jpmc26 2017-04-13 21:03:26