У меня есть скрипт, который получает информацию о последнем входе в систему для любого данного тега службы. Я запускаю это практически каждый день для развертывания. Прочитав о работе, я решил, что стоит написать процесс как работу. Сценарий, который я написал, работает в том смысле, что возвращает информацию. Сравнивая результаты обоих сценариев, я понял, что сценарий, выполняющий команду как задание, не возвращает информацию о каждом компьютере в списке компьютеров.
Это ошибка, которую я получаю. Похоже, что это возвращает против каждой машины, но затем по-прежнему предоставляет информацию для большинства из них.
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
Что я могу сделать, чтобы предотвратить потерю информации, или это побочный эффект запуска чего-либо в качестве задания?