2017-09-08 10 views
0

So schreibe ich Windows Update'r-Automat in Java. Für das Abrufen benötigten Daten aus Windows-Server ich verwende jPowerShell und ich habe stamble apon seltsames Problem während dieses SkriptVerschiedene PowerShell-Skript Verhalten in verschiedenen Konsole

$pw = ConvertTo-SecureString 'password' -AsPlainText -Force 
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentList domein\login, $pw 
Enter-PSSession -ComputerName IP -Credential $cred 
$UpdateSession = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session")) 
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()    
$SearchResult = $UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0") 
      $Critical = $SearchResult.updates | where { $_.MsrcSeverity -eq "Critical" } 
       $important = $SearchResult.updates | where { $_.MsrcSeverity -eq "Important" } 
       $other = $SearchResult.updates | where { $_.MsrcSeverity -eq $nul} 
       $totalUpdates = $($SearchResult.updates.count) 
       if($totalUpdates -gt 0) 
       { 
        $updatesToInstall = $true 
       } 
       else { $updatesToInstall = $false } 
$other 
$totalUpdates 
$updatesToInstall 

Java Aufruf Powershell-Skript

PowerShell ps = PowerShell.openSession(); 
     PowerShellResponse response; 
     response = ps.executeScript("C:\\Users\\Prezes\\Desktop\\IsUpdateToInstal.ps1"); 
     System.out.println(response.getCommandOutput()); 

Powershell-Skript ausführen, wenn ich dies ausführen Skript Zeile für Zeile in PowerShell-Standard-Consol-Everyting funktioniert gut und ordnungsgemäßer Wert zurückgegeben werden. Aber wenn ich dieses Skript in Powershell ISE Zeile für Zeile ausführen oder ausführen von Java bemerke ich ein Problem mit dieser Linie

$UpdateSession = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session")) 

, während ich diese Zeile und drücken Sie die Eingabetaste enter i in ISE sehen „bereits einen Befehl ausgeführt wird, Bitte warten Sie "wenn ich ein paar Minuten warte, ist die Kommunikation gleich und nichts ändert sich, aber wenn ich die Enter-Taste drücke, wird der Befehl sofort ausgeführt. Wenn von ihnen jetzt ich Rest des Drehbuchs laufen lasse, arbeite ich gut.

Wenn ich versuche, in ISE vollständige Skript excecute Ich bin geting diesem Fehler

Exception form HRESULT: 0x80072EE2 
At C:\Users\Prezes\Desktop\IsUpdateToInstal.ps1:6 char:1 
+ $SearchResult = $UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 a ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : OperationStopped: (:) [], COMException 
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMExceptio 

Java gibt mir null sagen, dass ich nicht auf Null-Objekt methond laufen reffering bis $ UpdateSearcher

Ich bin sehr früh beginer mit PowerShell und Skript, das ich benutze, ist reine Form einige Beispiel in Google gefunden.

+0

Unter welchem ​​Konto läuft das Java-Programm? – Persistent13

+0

Mein Domein-Konto Windows 10 Home Premium –

+0

Können Sie das Skript erfolgreich auf einem anderen Computer ausführen? – Persistent13

Antwort

0

So hatte ich nicht herausfinden, was die Ursache für seltsames Verhalten war, aber ich habe es geschafft, etwas zu schreiben, das für mich durch PowerShell API in Java zu arbeiten begann und erhalten Wert.

$pw = ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force 
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentList 792\opmanager, $pw 
$TotalUpdates = Invoke-Command -ComputerName IP -ScriptBlock{ 
$UpdateSession = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session")) 
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()    
$SearchResult = $UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0") 
      $Critical = $SearchResult.updates | where { $_.MsrcSeverity -eq "Critical" } 
       $important = $SearchResult.updates | where { $_.MsrcSeverity -eq "Important" } 
       $other = $SearchResult.updates | where { $_.MsrcSeverity -eq $nul} 
       $totalUpdates = $($SearchResult.updates.count) 
       if($totalUpdates -gt 0) 
       { 
        $updatesToInstall = $true 
       } 
       else { $updatesToInstall = $false } 
Return $totalUpdates 
} -Credential $cred 
$TotalUpdates 
Verwandte Themen