【发布时间】:2018-05-03 00:56:51
【问题描述】:
我有一个脚本可以获取任何给定服务标签的最后登录信息。我几乎每天都运行它以进行部署。在阅读了有关工作的信息后,我认为将流程写成工作是值得的。我编写的脚本可以返回信息。在比较两个脚本的结果时,我意识到将命令作为作业运行的脚本不会返回计算机列表中每台计算机的信息。
这是我遇到的错误。它似乎会针对每台机器返回此信息,但仍会为其中大多数机器提供信息。 Error
旧脚本返回列表中每台计算机的信息。
#Load Active Directory
Import-Module activedirectory
#Load list of computers
$Results = @()
$Computer = Get-Content -path 'C:\Scripts\computers.txt'
#Check each computer in the list
ForEach($ComputerName in $Computer)
{
$results += Get-ADComputer -Filter " Name -Like '*$ComputerName*' " -Properties name, samaccountname, lastlogondate, DNSHostName; Start-Sleep -Seconds 3
}
#Export to CSV file
$Results | Select Name, SamAccountName, LastLogonDate, DNSHostName | Export-Csv -NoTypeInformation -Path 'C:\Scripts\output.csv'
新脚本不会返回所有机器上的信息,即使它实际上运行的是相同的命令,只是不同。
#Check each computer in the list
Write-Host -Foreground Green "Getting last logon information"
foreach($ComputerName in $Computer)
{
Start-Job C:\Scripts\GetADComputer.ps1 -ArgumentList $ComputerName
}
#Wait for jobs
Get-Job | Wait-Job
#Get job results
$Results += Get-Job | Receive-Job
#Export to CSV file
$Results | Select Name, SamAccountName, LastLogonDate, DNSHostName | Export-Csv -NoTypeInformation -Path 'C:\Scripts\output1.csv'
它启动作业时调用的脚本是:
#Allows the $ComputerName variable from the initial script to be used.
param(
[Parameter(Mandatory=$True,
ValueFromPipeline=$True)]
[string[]]$ComputerName
)
#Load Active Directory
Import-Module activedirectory
#Retrieves information about the ADComputers
Get-ADComputer -Filter " Name -Like '*$ComputerName*' " -Properties name, samaccountname, lastlogondate, DNSHostName; Start-Sleep -Seconds 3
我可以做些什么来防止信息丢失,或者这是作为工作运行某事的副作用?
【问题讨论】:
-
好奇:为什么要针对 AD 运行
-Filter查询而不是搜索-Identity? -
你为多少台电脑做这个?为什么你使用作业而不是生成的过滤器?不能根据 OU、ADGroup 或 OS 进行搜索吗?我在下面提供了一个示例,它显示了另一种方法来做你想做的事。
-
@TheIncorrigible1 由于我们使用的命名约定(它将站点位置和机器用途与服务标签结合起来),我目前正在使用过滤器。尚未确认的机器的所有服务标签,但不是计算机名称,都在我可以从中提取的数据库中*。 *我希望我能够直接从数据库中提取,但我可以得到一个包含所有标签的提取文件。
-
@SteloNLD 这并不是我要针对的机器的静态数量。它每周都在变化,具体取决于对新机器的请求数量。最小值趋于 20 左右,最大值约为 50。
标签: powershell jobs