WinFuture-Forum.de: Powershell ein Script aus einem Script starten. - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Powershell ein Script aus einem Script starten.


#1 Mitglied ist offline   Robmantuto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 63
  • Beigetreten: 21. April 05
  • Reputation: 0

geschrieben 03. November 2016 - 09:26

Hi, ich würde gerne ein .ps1D-Datei aus einem Script starten. Habe ein Fenster mit Buttons, mit denen ich Befehle bzw. Dateien ausführen lasse.
hier ein Beispiel für einen Button.
$btn2 = MakeButton "Cmd" 60 20
$btn2.Add_Click({
$btn2 = MakeButton "Cmd" 60 20
  [Diagnostics.Process]::Start("cmd.exe")
$btn2.Add_Click({
  [Diagnostics.Process]::Start("cmd.exe")


Jetzt versuche ich eine .ps1 bzw. ein separetes Script zu starten, aber bekomme nur kurz ein schwarzes Fenster und das wars.

Hier der Befehl
 [Diagnostics.Process]::Start("powershell.exe",".\MeinScript.ps1")


Was ist falsch?
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 03. November 2016 - 18:28

Welche PS-Version?

Start-Process reicht. Eigentlich. Außerdem: & <Pfad zum Script>. Note: relative Pfade mag PS nur sehr bedingt und "gar kein Pfad" wie "aktuelles Verzeichnis" schon gleich ganz gar nicht.

Also:
& '.\Script.ps1'
& 'C:\...\Script.ps1'
oder sogar
. 'C:\...\...\Script.ps1'

(Der Punkt macht dasselbe wie bei bash: das Script wird im aktuellen Kontext ausgeführt. Ansonsten wird dafür ein eigener Prozeß erstellt und man bekommt nur das Ergebnis, aber keinen Zugriff auf enthaltene Variablen oder Funktionen oder Klassendefinitionen oder dergleichen.

Außerdem, aber das ist wohl Geschmackssache: mir gefällt der Weg über Windows.Forms signifikant besser. Kann aber jeder so halten wie er mag.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Robmantuto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 63
  • Beigetreten: 21. April 05
  • Reputation: 0

geschrieben 03. November 2016 - 18:49

Windows 7, also 1.0.
Bitte an meinem Beispiel zeigen.

Gesendet von meinem LG-D802 mit Tapatalk

Mir ist auf jeden Fall wichtig, dass das neue Script eine Abfrage startet. Denn das Script soll den Computernamen abfragen. Und ich muss diesen eingeben.

Gesendet von meinem LG-D802 mit Tapatalk
0

#4 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 03. November 2016 - 20:23

Statt
[Diagnostics.Process]::Start("powershell.exe",".\MeinScript.
ps1")


einfach nur

& '.\MeinScript.ps1'



Das & sagt sowas wie Start-Process, oder nur start; ohne geht es allerdings nicht, dann wird ein implizites Write-Host angenommen.

PS.

Win7 hat PS version 2.0. Die kann allerdings auch nicht so viel. Je nachdem wie Deine Möglichkeiten so sind, sei angeraten, Dir von Microsoft das WMF 5.0 herunterzuladen. Da steckt PowerShell in Version 5.0 drin.

PPS. Version findest Du raus mit
$PsVersionTable

.

Dieser Beitrag wurde von RalphS bearbeitet: 03. November 2016 - 20:26

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#5 Mitglied ist offline   Robmantuto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 63
  • Beigetreten: 21. April 05
  • Reputation: 0

geschrieben 08. November 2016 - 11:57

Sorry, bin erst jetzt dazu gekommen, leider funktioniert das auch nicht, wahrscheinlich, weil der Befehl in einem anderen Prozess ausgeführt wird. Ich denke, es muss ein Befehl geschrieben werden, der den gleichen Prozess nutzt oder andersrum, keine Ahnung. Es funktioniert auf jeden nur, wenn ich das Ganze Script in PS ISE ausführe. Dann führt er auch mein anderes Script aus.

Dieser Beitrag wurde von Robmantuto bearbeitet: 08. November 2016 - 15:48

0

#6 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 09. November 2016 - 00:20

Was gibt's denn für Meldungen?

"Normal" sollte das mit Prozessen insoweit nix zu tun haben, daß das ja eh alle eigene Prozesse sind. Auf die Rückgabe muß man aber aufpassen, insbesondere wenn das PS-Kindprozesse waren; denn die Ergebnisse sind nicht "live", sondern serialisiert, und man kann diese daher nicht zwangsläufig so weiterverwenden, wie man es ggf gewöhnt sein könnte.

Aber, ein simples Start-Process XYZ -ArgumentList a,b,c "müßte" "normalerweise" tun, was man von ihm verlangt - Berechtigungen dafür vorausgesetzt, wie's mit einem abweichenden Benutzerkontext aussieht müßt ich auch passen (würde aber erwarten, daß da isoliert wird und man keinen Zugriff kriegt).

- Hast Du schon geschaut was passiert, wenn Du diesen Befehl so wie er dasteht händisch abschickst? Nicht daß da irgendwas anderes querschießt, von ExecutionPolicies angefangen bis hin zu simplen Syntax- oder anderen Vertipp-Fehlern.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#7 Mitglied ist offline   Robmantuto 

  • Gruppe: aktive Mitglieder
  • Beiträge: 63
  • Beigetreten: 21. April 05
  • Reputation: 0

geschrieben 09. November 2016 - 11:48

So sieht ein Teil meines Scriptes aus:

$btn4 = MakeButton "[4] Computernamen umbenennen"  100 50
$btn4.Add_Click({& 'E:\Skripte\03.A.Computernamen umbenennen.ps1'
})



Das Script, das gestartet wird:
Write-Output "---------------------"
Write-Output "Wählen Sie bitte aus";
Write-Output "---------------------"
Write-Output "Computer        (bei einem Computer-Rechner)";
Write-Output "Computer001-010 (bei mehreren Computern)";
Write-Output "---------------------"
[string]$Computername = Read-Host "Bitte geben Sie den Computernamen, der vergeben werden soll?"
Rename-Computer -NewName $Computername
Write-Output "_____________________________________________________";
Write-Output "Der Computername $Computername wurde zugewiesen."
Write-Output "_____________________________________________________";
Write-Output "Bitte führen Sie einen Neustart des Computers durch";
Write-Output "_____________________________________________________";
Start-Sleep -s 5



Mit dem absoluten Pfad funktioniert es.
Zwei Probleme habe ich: Das Fenster des Computername-Umbenennen-Scriptes geht nicht von alleine zu, wenn ich es schliesse, schließt sich auch mein Auswahlfenster. Das möchte verhindern.
Zweites Problem: Die Write-Outputs werden nicht angezeigt, nur die Abfrage: "Bitte geben Sie den Computernamen, der vergeben werden soll?"
Starte ich das Script alleine, dann funktioniert es.

Eine andere Möglichkeit wäre das separate Script in meinem Hauptscript einzubauen, leider weiß ich nicht wie ich unter AddClick einbauen soll. Einfügen des Inhalts hat nicht funktioniert.

Dieser Beitrag wurde von Robmantuto bearbeitet: 09. November 2016 - 12:39

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0