我一直在尝试开发一个powershell脚本来查询AD中的特定OU,然后获取每个服务上的服务,包括name,status,startmode,startname,description。我已经非常接近但没有得到我期望的结果。有人可以帮忙吗?
问题是如果我专门为一台服务器运行命令,我会得到我想要的结果。如果我在OU中运行所有服务器,则它找不到任何唯一的起始名(只有本地帐户)。我想要一个首先使用服务器名称的CSV
单台计算机的脚本(获得我们想要的结果):
$ServerName = “server01”
Get-WmiObject win32_service -ComputerName $servername | Select @{N="ServerName";E={$ServerName}}, Name, Status, StartMode, StartName, description | Export-Csv "server_Services.csv" -NoTypeInformation
用于查询OU的脚本(仅返回具有本地帐户的服务):
$ServerOU = 'OU=Servers,DC=some,DC=domain'
$ServerList = Get-QADComputer -SearchRoot $ServerOU -SearchScope Subtree
$ServerList | ForEach {
$ServerNameTemp = $_.Name
Get-WMIObject Win32_Service |
Select @{N="ServerName";E={$ServerNameTemp}}, StartName, Name, StartMode, Status, description
} | Export-Csv -NoTypeInformation $ExportFile
答案 0 :(得分:0)
这应该是我认为的技巧但是下面想要为OU中的每个服务器创建一个文件,它将继续覆盖相同的文件。 我还将Get-QADComputer改为Get-ADComputer,对此问题没有特别需要任务powershell:)
$ServerOU = 'OU=Servers,DC=some,DC=domain'
$ServerList = Get-ADComputer -SearchBase $ServerOU -Filter *
ForEach ($Server in $Serverlist)
{
Invoke-Command -ComputerName $Server.Name -ScriptBlock {
Get-WMIObject Win32_Service |
Select @{N="ServerName";E={[System.Net.Dns]::GetHostName()}}, StartName, Name, StartMode, Status, description}
} | Export-Csv -NoTypeInformation $ExportFile
这样它会首先将ti全部发送到变量,然后发送到文件。
$ServerOU = 'OU=Servers,DC=some,DC=domain'
$Services = @()
$ServerList = Get-ADComputer -SearchBase $ServerOU -Filter *
ForEach ($Server in $Serverlist)
{
$Services += Invoke-Command -ComputerName $Server.Name -ScriptBlock {
Get-WMIObject Win32_Service |
Select-Object @{N="ServerName";E={[System.Net.Dns]::GetHostName()}}, StartName, Name, StartMode, Status, description }
}
$Services | Export-Csv -NoTypeInformation $Exportfile
答案 1 :(得分:0)
PS Remoting会在win 2012中自动启用。如果您之前使用任何Win服务器,则需要启用WinRM服务,以启用PowerShell远程处理。如果您尝试对这些服务器使用“Invoke-Command”或任何“* -Session”cmdlet,这一点非常重要。