none
Powershell in Batch RRS feed

  • Frage

  • Hey,
    ich würde gerne folgendes über Batch ausführen lassen:

    @echo on
    PowerShell.exe Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1"
    pause
    Remove-OSCSID -Path D:\ -recurse
    pause
    Exit

    Wie mache ich das am besten?
    Cool wäre es auch wenn ich bei dem Befehl Remove-OSCSID -Path D:\ -recurse dann eine Aufforderung bekomme zur manuellen Eingabe des Pfades....

    Danke und Gruß

    Donnerstag, 7. Juli 2016 08:14

Antworten

  • Es gibt auf jeder Gallery-Seite einen Frage/Antwort-TAB. Da kannst du eine Frage zum jeweiligen Script stellen.
     
    Aber unabhängig davon, muß ich mal fragen:
    Was ist der Vorteil , ein Powershell-Script erst umständlich über Batch-Textausgaben zu erzeugen und dann erst das Script zu starten, anstatt einmal ein normales, leichter änder- und debugbares Powershell-Script wie üblich zu erstellen und dann einfach wenn nötig über eine *.bat mir einem Einzeiler zu starten?

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Juli 2016 11:27
    Moderator
  • Moin,

    ich "echo" das immer gern in eine richtige -ps1 Datei und führe die dann aus. Das würde dann so aussehen:

    @echo off
    
    @echo Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1" > .\dein-script.ps1
    @echo $path = Read-Host -Prompt 'Bitte Pfad eingeben' >> .\dein-script.ps1
    @echo Remove-OSCSID -Path $path -recurse >> .\dein-script.ps1
    
    Powershell.exe -executionpolicy remotesigned -File .\dein-script.ps1
    
    Exit

    Donnerstag, 7. Juli 2016 09:00

Alle Antworten

  • Moin,

    ich "echo" das immer gern in eine richtige -ps1 Datei und führe die dann aus. Das würde dann so aussehen:

    @echo off
    
    @echo Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1" > .\dein-script.ps1
    @echo $path = Read-Host -Prompt 'Bitte Pfad eingeben' >> .\dein-script.ps1
    @echo Remove-OSCSID -Path $path -recurse >> .\dein-script.ps1
    
    Powershell.exe -executionpolicy remotesigned -File .\dein-script.ps1
    
    Exit

    Donnerstag, 7. Juli 2016 09:00
  • Iwie klappt das noch nicht.
    Hab mir ne neue ps1 Datei erstellt (RemoveSIDFromACL.ps1) und da dann folgendes rein gepackt:

    @echo off

    @echo Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1" > .\RemoveSIDFromACL.ps1
    @echo $path = Read-Host -Prompt 'Bitte Pfad eingeben' >> .\RemoveSIDFromACL.ps1
    @echo Remove-OSCSID -Path $path -recurse >> .\RemoveSIDFromACL.ps1

    Powershell.exe -executionpolicy remotesigned -File .\RemoveSIDFromACL.ps1

    Exit

    Es kommt folgender Fehler......was mache ich falsch?

    PS C:\Temp\RemoveSIDFromACL> C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1


    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:1 Zeichen:7

    + @echo off

    +       ~~~

    Unerwartetes Token "off" in Ausdruck oder Anweisung.

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:3 Zeichen:7

    + @echo Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1" > .\RemoveS ...

    +       ~~~~~~~~~~~~~

    Unerwartetes Token "Import-Module" in Ausdruck oder Anweisung.

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:4 Zeichen:7

    + @echo $path = Read-Host -Prompt 'Bitte Pfad eingeben' >> .\RemoveSIDFromACL.ps1

    +       ~~~~~

    Unerwartetes Token "$path" in Ausdruck oder Anweisung.

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:5 Zeichen:7

    + @echo Remove-OSCSID -Path $path -recurse >> .\RemoveSIDFromACL.ps1

    +       ~~~~~~~~~~~~~

    Unerwartetes Token "Remove-OSCSID" in Ausdruck oder Anweisung.

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:1 Zeichen:1

    + @echo off

    + ~~~~~

    Der Splat-Operator "@" kann nicht dazu verwendet werden, auf Variablen in einem Ausdruck zu verweisen. "@echo" kann nur als Argument für einen Befehl verwendet werden. Wenn Sie auf

    Variablen in einem Ausdruck verweisen möchten, verwenden Sie "$echo".

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:3 Zeichen:1

    + @echo Import-Module "C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.psm1" > .\RemoveS ...

    + ~~~~~

    Der Splat-Operator "@" kann nicht dazu verwendet werden, auf Variablen in einem Ausdruck zu verweisen. "@echo" kann nur als Argument für einen Befehl verwendet werden. Wenn Sie auf

    Variablen in einem Ausdruck verweisen möchten, verwenden Sie "$echo".

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:4 Zeichen:1

    + @echo $path = Read-Host -Prompt 'Bitte Pfad eingeben' >> .\RemoveSIDFromACL.ps1

    + ~~~~~

    Der Splat-Operator "@" kann nicht dazu verwendet werden, auf Variablen in einem Ausdruck zu verweisen. "@echo" kann nur als Argument für einen Befehl verwendet werden. Wenn Sie auf

    Variablen in einem Ausdruck verweisen möchten, verwenden Sie "$echo".

    In C:\Temp\RemoveSIDFromACL\RemoveSIDFromACL.ps1:5 Zeichen:1

    + @echo Remove-OSCSID -Path $path -recurse >> .\RemoveSIDFromACL.ps1

    + ~~~~~

    Der Splat-Operator "@" kann nicht dazu verwendet werden, auf Variablen in einem Ausdruck zu verweisen. "@echo" kann nur als Argument für einen Befehl verwendet werden. Wenn Sie auf

    Variablen in einem Ausdruck verweisen möchten, verwenden Sie "$echo".

        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException

        + FullyQualifiedErrorId : UnexpectedToken

    Donnerstag, 7. Juli 2016 09:12
  • Moin,

    PowerShell kennt kein @echo ;-)


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Donnerstag, 7. Juli 2016 09:14
  • Sieht schon besser aus..
    Jetzt bekomme ich das wenn ich einen Pfad vorgebe:
    Donnerstag, 7. Juli 2016 09:18
  • Du musst das ganze als .bat datei abspeichern. Diese erstellt die .ps1 Datei automatisch udn führt sie aus.
    Donnerstag, 7. Juli 2016 09:32
  • Ahhh :-)

    Danke :-)
    • Bearbeitet HaschkeD Donnerstag, 7. Juli 2016 09:46
    Donnerstag, 7. Juli 2016 09:41
  • Hab ein wenig getestet...
    Gebe ich als Pfad Z:\Daten\User ein fängt er an zu prüfen....
    Bei  Z:\Daten\User\ALG-Wittenbach kommt ein Fehler:

    Warum das?

    Donnerstag, 7. Juli 2016 10:02
  • > Bei  Z:\Daten\User\ALG-Wittenbach kommt ein Fehler:
     
    Das ist ein Fehler in dem von Dir importierten Modul - wo kommt das her?
    Kannst Du den Autor kontaktieren?
     
    > Warum das?
     
    Weil das Modul Fehler mit Write-Error ausgeben will - das akzeptiert
    aber nur Strings als Ausgabewert und keine Arrays.
     
    Könnte man IMHO ändern auf
     
    Write-Error $( $Error.ToString() )
     
    (Wenn sich $Error in einen String konvertieren läßt...)
     
    Donnerstag, 7. Juli 2016 10:51
    • Bearbeitet HaschkeD Donnerstag, 7. Juli 2016 11:14
    Donnerstag, 7. Juli 2016 11:04
  • Es gibt auf jeder Gallery-Seite einen Frage/Antwort-TAB. Da kannst du eine Frage zum jeweiligen Script stellen.
     
    Aber unabhängig davon, muß ich mal fragen:
    Was ist der Vorteil , ein Powershell-Script erst umständlich über Batch-Textausgaben zu erzeugen und dann erst das Script zu starten, anstatt einmal ein normales, leichter änder- und debugbares Powershell-Script wie üblich zu erstellen und dann einfach wenn nötig über eine *.bat mir einem Einzeiler zu starten?

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Juli 2016 11:27
    Moderator
  • Da hast du recht.
    PS ist nicht so meine Welt.
    Aber sicherlich kann man das auch alles in ein PS Skript packen.
    Donnerstag, 7. Juli 2016 11:28
  • Das würde ich empfehlen. Hat diverse Vorteile.
    Das Script hast du ja nun eh nach einmaligem Durchlauf der "Erstellungsroutine" oben eh schon. Das behältst du dann einfach und lässt in der Batch nur noch die "Powershell.exe..."-Zeile. Hierzu kannst du die noch mal die Kommandozeilenoptionen anschauen, ob da was dabei ist was du noch brauchen könntest (z.b. verstecken der Konsole).


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Donnerstag, 7. Juli 2016 11:41
    Moderator