Jump to content

powershell start script mit "WindowsOptionalFeature" funktioniert nicht


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo

 

Ich habe folgendes Problem.

 

Für eine Taskforce muss ich vorübergehend auf einer OU mit Computeropjekten SMBv1 auf Windows 10 1803 aktivieren.

 

Nun dachte ich mir,... schön folgende zeile in einem powershell start script und fertig.

"Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol | ?{$_.State -ne 'Enabled'} | Enable-WindowsOptionalFeature -online -NoRestart"

 

Nur leider funktioniert das nicht.

Der Test-PC's an dem ich es gerade vor dem ausrollen ausprobiere hängt dann bei Software installation beim starten ca. 1min "äußerst detaillierte statusmeldungen anzeigen" sind aktiv.

Wenn er dasnn hochgefahren ist und man den händisch den Status von SMB1Protocol überprüft ist es immernoch deaktiviert.

Auch mehrmalige Neustarts bringen nichts.

 

Hab ich da irgendwas GPO seitig vergessen damit Enable-WindowsOptionalFeature angewendet wird.

Zur info,... das powershell skript wird auf dem client angewendet.

Ich hab mal eine Zeile hinzugefügt die eine leere Textdatei auf C:\ erzeugt,... welches auch geklappt hat.

 

Daher bin ich gerade überfragt.

 

Auf Serverseiten wird Server2008R2 mit den neusten Win10 1803 ADMX Templates genutzt.

 

Hab ich da irgendwas Serverseitig vergessen zu aktivieren um den Win10 Client das ausführen von Enable-WindowsOptionalFeature zu erlauben.

 

 

Es wäre echt nett wenn ihr mir helfen könntet.

 

Danke

bearbeitet von holger.tems
Link zu diesem Kommentar

Wie wird das PS-Script ausgeführt? In einer administrativen PS? Was findet sich im Ereignisprotokoll dazu? Probier doch mal das hier aus:

 


Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

 

Quelle: https://support.microsoft.com/de-de/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and Ich vermute bei deinem Enable-Windows.. fehlt der Feature Name. Probier es aus. 

Link zu diesem Kommentar

Das reine "Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol" hab ich auch schon ausprobiert.

Funktioniert leider auch nicht.

 

Gibt es bezüglich Start Scripts noch unterschiedliche Berechtigungsstufen bei powershell?

Ich dachte wenn ich es unter "computerkonfiguration\richtlinien\windows einstellunge\skripts" einbinde wird es sowieso mit systemweiten rechten ausgeführt.

 

Wenn ich die zeile lokal via powershell console an einen Win10 PC eingebe mit Admin rechten funktioniert es übrigens.

Auch mit dem vorherigen prüfen ob es schon aktiviert ist.

 

Nur wenn ich es im Startskript packe wendet er es nicht an?

Würde ja zu deiner theorie passen das es als start script mit unzureichenden rechten ausgeführt wird.
 

Aber wo kann man da was ändern.

Wie gesagt das powershell skript an sich läuft ja.

Und auch die testzeile die eine leere textdatei auf C:\ anlegt muss ja erweiterte rechte haben.

Sonnst würde das erstellen nicht funktionieren.

 

Ich bin echt überfragt.

Kann jemand der vielleicht daheim noch ein labor zu testzwecken virtuell laufen hat das ganze mal bei sich nachspielen?

 

Nicht das irgendwelche einstellungen sich da in meiner umgebung in die quere kommen.

 

 

Ich bin für jeglichen tip dankbar.

 

 

mfg. Holger

bearbeitet von holger.tems
Link zu diesem Kommentar

Hi,

 

wo liegt das PS Script? Ggfs. einmal per StartUp Script (Batch) auf den lokalen PC kopieren, dann aus der Batch das PS Script aufrufen (PowerShell.exe -ExecutionPolicy Bypass -File C:\install\Script.ps1) und am Ende das Script wieder löschen. Ansonsten hilft evtl. am Anfang ein "Start-Transcript -Path "C:\install\smb1info.txt"" und am Ende "Stop-Transcript" einzufügen. Eine weitere Hilfe könnte sein:

 

if($(Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol).State -eq "Disabled") {
    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol | Out-File "C:\install\SMB1.txt"
}

 

Gruß

Jan

bearbeitet von testperson
Link zu diesem Kommentar

Vielen dank für die ganzen Tips.

 

Leider funktioniert nicht mal das von "testperson" vorgeschlagene ausführen der powershell datei nachdem diese mittels einfachen xcpoy im batch start script rüber kopiert wurde.

 


Ich bin vorhin aber auf eine alternative gestoßen.

DISM /online /enable-feature /featurename:SMB1Protocol

Mit DISM scheint es auch via startskript zu funktionieren.

Nun würde ich aber gerne noch eine IF abfrage davor schalten um es nicht jedesmal auszuführen.
Gibt es mittels DISM auch sowas wie ein "get-feature.status = enabled" welches man auf wahrheit prüfen kann um im vorfeld zu erfahren ob es schon aktiviert ist?
Ich hab da momentan noch nichts passendes gefunden.

Wenn das noch funktionieren würde hätte man eine einfachen ersatz für die powershell variante gefunden die irgendwie nur probleme macht.

bearbeitet von holger.tems
Link zu diesem Kommentar

Warum schaust Du nicht ins Eventlog? Dort sollte man als erstes schauen. Und zusätzlich schreibt man *IMMER* im ersten Posting *genau* rein, wie oder wo oder wann man das Script ausführt.  Per Taskplaner oder eben per Computerstartupscript oder manuell. Lass dir diese Dinge in Zukunft nicht aus der Nase ziehen.

 

Den DISM Befehl oder die PS-Zeile via Task auf die Clients bringen, den Task als SYSTEM ausführen lassen, fertig.

 

Aber wenn bei dir alles irgendwie nicht funktioniert, wird auch das irgendwie nicht funktionieren. Und funktioniert nicht ist eine irgendwie unwahrscheinlich hilfreiche Aussage. :)

Link zu diesem Kommentar

@Sunny61
Das es auf eine OU via GPO als powershell start script angewandt werden soll steht alles im ersten post^^

 

Ich hab im Eventlog natürlich versucht zu schauen aber (meiner meinung nach) nichts eindeutiges gefunden was auf ein fehlgeschlagenes ausführen des skriptes deutet.

Wenn du mir sagst wonach ich geziehlt suchen soll schau ich aber gerne nochmal nach^^

 

Das nutzen der Aufgabenplanung ist natürlich der workaround wie ihn NorbertFe schon beschrieben hat den ich dann als letzten ausweg auch probieren werde.
 

Trotzdem würde mich interessieren ob ihr vielleicht wisst wie man bei DISM eine IF abfrage bezüglich einer statusabfrage basteln könnte.

Hat den vielleicht einer von euch daheim noch ein virtuelles Labor laufen sodass er das beschriebene verhalten mit dem powershell skript bestätigen kann.
Nicht das es nachher an andern faktoren in meiner umgebung liegt.

bearbeitet von holger.tems
Link zu diesem Kommentar
vor 10 Stunden schrieb holger.tems:

@Sunny61
Das es auf eine OU via GPO als powershell start script angewandt werden soll steht alles im ersten post^^

 

Ich hab im Eventlog natürlich versucht zu schauen aber (meiner meinung nach) nichts eindeutiges gefunden was auf ein fehlgeschlagenes ausführen des skriptes deutet.

Wenn du mir sagst wonach ich geziehlt suchen soll schau ich aber gerne nochmal nach^^

 

Das nutzen der Aufgabenplanung ist natürlich der workaround wie ihn NorbertFe schon beschrieben hat den ich dann als letzten ausweg auch probieren werde.
 

Ich lese im ersten Posting nichts von einem Computerstartupscript, nur von einer OU. D.h. für mich nicht, dass es automatisch ein Computerstartupscript ist. Du meinst es müssen alle wissen? Nein, jeder macht es anders. Ich bin an der Stelle auch bei Norbert, geplanten Task per GPP auf die Rechner der OU, fertig. Das ist kein Workaround, sondern eine sehr saubere und ordentliche Lösung für diese deine Aufgabe. Wenn das Thema erledigt ist, SMBV1 wieder deaktivieren im gleichen Task und nach 30 Tagen den Task löschen.

 

Ist es nur beim Versuch zu schauen geblieben, oder hast du auch tatsächlich geschaut? In welchen Teilen des Log hast Du geschaut? Es gibt ein Log nur für die Powershell. Wenn es ein Computerstartupscript war, dann sollte man dort eine Fehlerbehandlung einbauen.

 

DISM ist doch nur eine Zeile im Script. Bau mit PS deine IF-Abfrage und starte einfach den DISM Teil. Du kannst auch eine Batch nehmen, IF-Abfrage rein, DISM rein, fertig.

 

 

Link zu diesem Kommentar

@Sunny61

Im ersten post steht das es auf eine OU mit Computerobjekten als start script angewandt werden soll.

 

Es wurde wie geschrieben im Eventlog versucht nacht fehler oder warnungen zu suchen welche auf ein nichtausführendes skript hinweist unter folgenden pfad: "ereignisanzeige -> anwendungs- und dienstprotokolle -> windows powershell"

 

Wenn du ein besseren suchpunkt in der ereignisanzeige vorschlägst schau ich da auch gerne nochmal nach.

Bezüglich des einbaus einer fehlerbehandlung im powershell script kenne ich micht leider zu wenig aus.
Das kannst du mir ja gerne ein beispiel zukommen lassen!


Wie würde denn deine IF abfrage im batch aussehen mit reinen DISM

Ich hab es schon mit "DISM /online /get-featureinfo /featurename:SMB1Protocol" probiert aber bekomme den wert "status" (der irgendwie noch hinten ran müsste) nicht auf aktiviert/deaktiviert geprüft.

 

 

Das es mit der Aufgabenplanung sicher funktioniert ist ja schön.

Ich würde trotzdem gerne das wenigstens eine vorgeschaltete DISM abfrage mit prüfung ob es schon aktiviert ist zum laufen bekommen.
 

 

Wie schon im vorherigen post geschrieben hat denn niemand von euch (diejenigen die halt mehr erfahrung und wissen haben als ich) noch ein testlab daheim laufen wo er/sie das mal kurz selbst gegentesten kann.

Link zu diesem Kommentar

Hast du denn das Script mal um Start- bzw. Stop-Transcript ergänzt oder das Enable-WindowsOptionalFeature an Out-File gepiped?

Ansonsten "dism /online /get-featureinfo /featurename:SMB1Protocol | findstr Deaktiviert" sollte dir nichts ausgeben, wenn es aktiviert ist und "Status : Deaktiviert" wenn es deaktiviert ist.

bearbeitet von testperson
Link zu diesem Kommentar

Nur eine kleine Idee: Wenn Du wissen möchtest, ob ein optionales Feature in Windows aktiviert/installiert ist, brauchst Du keine DISM Abfrage. Das kann Powershell direkt "out-of-the-box" alleine. Hiermit bekommst Du alle optionalen Feature aufgelistet:

Get-WindowsOptionalFeature -Online

So kannst Du Dir alle Features die mit SMB1 zusammenhängen auflisten:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol*

Und so dampfst Du die Anzeige auf die für Dich vermutlich relevanten Infos ein:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol* |
    Select-Object -Property FeatureName,State

Wie üblich in Powershell, arbeitest Du mit Objecten und deren Eigenschaften. Das macht es natürlich auch möglich in einem Script, den Status des jeweiligen gesuchten Features abzufragen und das Ergebnis für weitere Schritte zu benutzen.  ;-):D

 

Link zu diesem Kommentar

@testperson

 

Start-Transcript hat leider auch nicht geholfen.

Es wurde auch keine textdatei erzeugt.

 

Bei "| findstr Deaktiviert" sehe ich ehr das problem das nicht nur deutsche WIn10 Versionen hier im einsatz sind und findstr wirklich 100%ige gleichheit erfordert.

Deshalb hätte ich ja gerne (was anscheinend ja geht) das man den state parameter der ausgabe "DISM /online /get-featureinfo /featurename:SMB1Protocol" direkt in form eines bool wertes abfragt.


@BOfH_666
Wenn du es schaffst diese powershell Zeilen in ein Startskript das via GPO auf das Computerobjekt angewand wird zum laufen zu bekommen bist du mein Held.
Am system direkt funktionieren die von dir genanten powershell zeilen prima. Nur als startscrtipt werden die nicht angewandt.

Deshalb kahm ja auch schon mehrmal der vorschalg hier das script über de GPO als Aufgabe an das lokale system auszurollen.

Mich würde aber interessieren warum es nicht als start script funktioniert.

Link zu diesem Kommentar
vor 1 Stunde schrieb holger.tems:

@Sunny61

Im ersten post steht das es auf eine OU mit Computerobjekten als start script angewandt werden soll.

Naja, die Info muss man sich in verschiedenen Absätzen zusammen kramen. Und dann ist der Zusammenhang nicht leicht zu finden. Besser gleich saubere Informationen abgeben.

 

vor 1 Stunde schrieb holger.tems:

Es wurde wie geschrieben im Eventlog versucht nacht fehler oder warnungen zu suchen welche auf ein nichtausführendes skript hinweist unter folgenden pfad: "ereignisanzeige -> anwendungs- und dienstprotokolle -> windows powershell"

 

Wenn du ein besseren suchpunkt in der ereignisanzeige vorschlägst schau ich da auch gerne nochmal nach.

Was findest Du in den anderen Teilen des Eventlog? Keinerlei Fehlermeldungen? Glaub ich nicht.

 

vor 1 Stunde schrieb holger.tems:

Bezüglich des einbaus einer fehlerbehandlung im powershell script kenne ich micht leider zu wenig aus.
Das kannst du mir ja gerne ein beispiel zukommen lassen!

Hiermit solltest Du weiter kommen: https://www.msxfaq.de/code/powershell/pserrhandling.htm

 

vor 1 Stunde schrieb holger.tems:

Wie würde denn deine IF abfrage im batch aussehen mit reinen DISM

IF EXIST \\Server\Freigabe\%computername%.txt GOTO

 

BTW: Fragen beendet man mit einem ?-Zeichen, Danke.

 

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...