Ich stelle ein Skript zusammen, das alle Webserverzertifikate überprüft, damit ich überwachen kann, wann sie ablaufen. Wenn das Skript die Invoke-Command
auszuführen geht ich diese Störung erhalte:Warum schlägt mein Invoke-Befehl fehl?
Hier ist mein Code:
Import-Module WebAdministration
$results = @()
$ou = 'OU=test,OU=test,OU=Servers,DC=contoso,DC=com'
$subtree = Get-ADOrganizationalUnit -SearchBase $ou -SearchScope Subtree -filter * | Select-Object -ExpandProperty DistinguishedName
ForEach($dn in $subtree){
$servers = Get-ADComputer -Filter * -SearchBase $dn | select Name
$results += $servers
}#ForEach($dn in $subtree)
$scriptBlock = [scriptblock]::Create({
Import-Module WebAdministration; Get-ChildItem -Path IIS:SSLBindings | ForEach-Object -Process `
{
If($_.Sites){
$certificate = Get-ChildItem -Path CERT:LocalMachine/My |
Where-Object -Property Thumbprint -EQ -Value $_.Thumbprint
[PSCustomObject]@{
Sites = $_.Sites.Value
CertificateDNSNameList = $certificate.DnsNameList
CertificateNotAfter = $certificate.NotAfter
}#[PSCustomObject]
}#If($_.Sites)
}#Import-Module
})#ScriptBlock
ForEach($server in $results){
Invoke-Command -ComputerName $server -ScriptBlock $scriptBlock | Select Sites,CertificateDNSNameList,CertificateNotAfter,PSComputerName #ScriptBlock
}#ForEach($server in $results)
Jetzt, Wenn ich die folgende Zeile aus der Schleife nehmen und ersetzen $server
mit einem tatsächlichen Servernamen, erhalte ich die Ergebnisse ich suche:
Invoke-Command -ComputerName ServerName -ScriptBlock $scriptBlock | Select Sites,CertificateDNSNameList,CertificateNotAfter,PSComputerName
Irgendwelche Ideen, was ich falsch mache?
gut, offensichtlich etwas falsch mit Ihrem Servernamen, überprüfen nur das Array Sie bekommen – 4c74356b41
Ich sehe nicht, wo Sie definieren '$ Serverliste '. –
@JeffZeitlin Ich entschuldige mich, dass ich nach dem Testen einer anderen Route zurück zu '$ results' gegangen bin. Ich habe den ursprünglichen Post bearbeitet. – T4RH33L