3 Replies Latest reply on Jan 25, 2018 8:23 AM by m_hollinder

    Powershell CallScript ändert das Ergebnis ab

    Rookie

      Hallo zusammen,

       

      ich habe das Problem, dass ein Script lokal ausgeführt funktioniert, aber per DSM CallScript das Ergebnis verfälscht.

       

      Das Script soll den Zielpfad eines links ändern also von z.B. "c:\temp\Benutzer Ordner" in "c:\temp2\Benutzer Ordner".

      Wenn ich das Script lokal ausführe klappt es einwandfrei. Führe ich das Script mit DSM und CallScript aus ist das Ergebnis "c:\temp2\Benutzer_Ordner".

      Führe ich das Script per Befehl " ExecuteEx('%WINSYSDIR%\WindowsPowerShell\v1.0\powershell.exe','-file "c:\temp\link_veraendern.ps1"','')/?/TL " aus, bleibt das Script hängen.

      X64 sollte irrelevant sein, da das Script auf einem X86 Betriebssystem ausgeführt wird.

      Die Execution Policy steht auf Unrestricted (zum testen).

       

      Hier die LOG Einträge

       

      15:14:58.333 2     nilsPipe: NPI: -> ExecuteEx('C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe','-file "c:\temp\link_veraendern.ps1"','')/?
      15:14:58.333 2     nilsPipe: NPI: Command line logging has been enabled.
      15:14:58.333 2     nilsPipe: NPI: To disable it, enable the flag 'Do not log command line parameters' of the command
      15:14:58.333 2     nilsPipe: NPI: Execute: 'C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe'
      15:14:58.333 2     nilsPipe: NPI: Waiting for process...

       

      Ich bin mit meinem Latein am Ende

       

      Hoffnungsvolle Grüße

       

      Mischa

        • 1. Re: Powershell CallScript ändert das Ergebnis ab
          SitzRieSe Expert

          Du hast den ExecuteEx leider falsch konfiguriert...

           

           

          Bei Variablename für Rückgabewert, kommt die Variable rein wo er den Erfolg der Ausführung dokumentieren soll. "Rückgabewert" eben

           

          Außerdem musst du bei Powershell noch die Execution Policy ändern wenn du ein ps1 Skript am Windows ausführen willst, sonst blockiert Windows die Ausführung. Als letztes würde ich den Pfad zur Powershell.exe weg lassen, Windows sucht sich den Pfad über die Umgebungsvariablen. So wäre es richtig:

           

           

          ExecuteEx('Powershell.exe -executionpolicy unrestricted -file "c:\temp\link_veraendern.ps1"','returncode','120')/?/TS

           

          Zusätzlich musst du den Befehl noch flaggen damit der auch mit den benötigten Rechten ausgeführt wird:

           

           

          Gruß

           

          Alex

          1 of 1 people found this helpful
          • 2. Re: Powershell CallScript ändert das Ergebnis ab
            SitzRieSe Expert

            Wenn du aber Tatsächlich nur eine Verknüpfung ändern willst, dann würde ich das nativ über DSM lösen und nicht über Powershell... Schau dich mal hier um:

             

             

            Einfach RemoveLink und CreateLink benutzen.

            • 3. Re: Powershell CallScript ändert das Ergebnis ab
              Rookie

              Hi Alex,

               

              vielen Dank für die Antwort.

              Ich merke das ich zuviele Tasks konfiguriert habe.

              Jetzt wo du es sagst fällt mir auch ein, dass mir das sogar schonmal passiert ist. Naja egal.

               

              Der Tipp mit DSM klappt bei mir leider nicht, da sich ein Netzwerkshare ändert und alle Links die damit anfangen bei den Nutzern geändert werden müssen.

              Hier das Script:

              #shell zur bearbeitung laden
              $shell = new-object -com wscript.shell

               

              #links abrufen
              get-childitem -Path C:\Users\$OU-test\Desktop -filter *.lnk -recurse | foreach {
                  #link öffnen
                  $lnk = $shell.CreateShortcut($_.fullname)
                  Write-Verbose $lnk
                  #alten Pfad speichern
                  $oldpath= $lnk.TargetPath
                  Write-Verbose $oldpath
                  #alten pfad gegebenenfalls ersetzen
                  $newpath = $oldpath.Replace("U:\test1","U:\test2")
                  Write-Verbose $newpath
                  #neuen Pfad in geöffnetem Link einfügen
                  $lnk.TargetPath = $newpath
                  #Link speichern
                  $lnk.Save()
              }

               

              Danke für deine Hilfe

               

              Mischa