PowerShell脚本,用于将服务器拉入AD,然后搜索在本地管理员帐户下运行的SERVICES

avwztpqn  于 2023-02-08  发布在  Shell
关注(0)|答案(1)|浏览(127)

PowerShell新手,尝试将脚本拼凑在一起以:
1.提取Active Directory中的服务器列表(完成)。
1.查询每台服务器,以获取在管理员凭据下运行的SERVICE帐户列表。
有人能指导我...更喜欢导出到CSV文件等。
谢谢你!
这是我的

Import-Module ActiveDirectory
$Serverlist = Get-ADComputer -Filter 'operatingsystem -like "*server*" -and enabled -eq "true"' `
-Properties Name
Sort-Object -Property Name |
foreach ($Server in $Serverlist) {
$Server
Get-WmiObject Win32-Service | Select DisplayName, StartName | Where-Object {$_.StartName -eq "administrator"}

获取这些错误:

At line:5 char:18
+ foreach ($Server in $Serverlist) {
+                  ~~
Unexpected token 'in' in expression or statement.
At line:5 char:17
+ foreach ($Server in $Serverlist) {
+                 ~
Missing closing ')' in expression.
At line:5 char:32
+ foreach ($Server in $Serverlist) {
+                                ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken
eqqqjvef

eqqqjvef1#

假设您具有远程查询这些主机的权限,则可以尝试以下操作:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*server*" -and enabled -eq "true"').DNSHostName
Get-CimInstance Win32_Service -Filter "StartName LIKE '%Administrator%'" -ComputerName $computers
    | Select-Object DisplayName, StartName, PSComputerName

1.附注

  1. Get-CimInstanceGet-WmiObject(在本例中被替换,因为在新的PowerShell版本中不再维护)可以并行调用查询,因此不需要循环。
    1.两个cmdlet都允许使用WQL进行查询。这种方式的筛选速度比使用powershell快。
    1.使用Get-WmiObject而不是Get-CimInstance的唯一真实的原因可能是使用DCOM作为远程处理协议。此时,您可以使用New-CimSessionOption -Protocol DCOM并使用CimSession进行连接。两个cmdlet的功能基本相同。
    1.您应该在Select-Object语句中包含PSComputerName,以了解对象来自哪台计算机。

相关问题