在更改密码之前搜索某些服务

Searching for certain services before changing a password

我想更改名称中包含 "syn" 的所有密码。我知道您可以通过我正在做的状态来完成它,但是无论如何都可以通过搜索字符串的名称来完成吗?

$acctname = "domain\user"
$svcpwd  = "password"
#Text file
$servers = (gc serverlist.txt) 
#from AD 
#Import-Module ActiveDirectory
#$servers = (Get-ADComputer -Filter *)

foreach ($server in $servers) 
{
  #Query service
  gwmi win32_service -computername $server | % { 
  if ($_.StartName -eq $acctname)
  {
    $servicename = $_.Name
    write-host "updating $servicename"
    $svcnm = gwmi win32_service -computername $server -filter "name='$servicename'"
    #Update Service
    $svcnm.change($null,$null,$null,$null,$null,$null,"$UserName",$svcpwd,$null,$null,$null) 
    #Stop Service
    $svcnm.stopservice
    #Start Service
    $svcnm.startservice
  }
}

要获取以特定名称开头的所有服务,您可以像这样将 $_.Name -like '*syn*' 添加到 if 检查中

if (($_.StartName -eq $acctname) -and ($_.Name -like '*syn*'))

新的 if 语句只会在您要查找的服务的 StartName 等于 $acctname 且 Name 中包含 'syn' 时触发,这是您的完整代码可能看起来的样子喜欢

$acctname = "domain\user"
$svcpwd  = "password"
#Text file
$servers = (gc serverlist.txt) 
#from AD 
#Import-Module ActiveDirectory
#$servers = (Get-ADComputer -Filter *)

foreach ($server in $servers) 
{
  #Query service
  gwmi win32_service -computername $server | % { 
  if (($_.StartName -eq $acctname) -and ($_.Name -like '*syn*'))
  {
    $servicename = $_.Name
    write-host "updating $servicename"
    $svcnm = gwmi win32_service -computername $server -filter "name='$servicename'"
    #Update Service
    $svcnm.change($null,$null,$null,$null,$null,$null,"$UserName",$svcpwd,$null,$null,$null) 
    #Stop Service
    $svcnm.stopservice
    #Start Service
    $svcnm.startservice
  }
}