2016-06-17 8 views
1

Ich habe 3x Skripte:Powershell - Andere Methode der Codeeinbindung?

  • C: \ Powershell \ Test1.ps1: WRITE-HOST "My Name is" $MyInvocation.MyCommand.Name . "C:\Powershell\Test2.ps1"
  • C: \ Powershell \ Test2.ps1: WRITE-HOST "My Name is" $MyInvocation.MyCommand.Name . "C:\Powershell\Test3.ps1"
  • C: \ Powershell \ Test3.ps1: WRITE-HOST "My Name is" $MyInvocation.MyCommand.Name

Dies ist die Ausgabe: PS C:\Powershell> .\Test1.ps1 My Name is Test1.ps1 My Name is Test2.ps1 My Name is Test3.ps1

Ich möchte, dass Test1.ps1 den Code in sich selbst INCLUDE, anstatt sie als Skripte in sich selbst zu nennen.

Wenn möglich, ist dies die Art von Ausgang würde Ich mag: PS C:\Powershell> .\Test1.ps1 My Name is Test1.ps1 My Name is Test1.ps1 My Name is Test1.ps1

ist das möglich? Das ursprüngliche Test1-Skript wird aufgerufen, also sollte dies den Namen des Skripts durchgängig, unabhängig davon, was es danach aufruft?

+1

Sie wollen im Grunde, dass ' $ MyInvocation.MyCommand.Name' enthält eine andere Skriptdatei als die Datei selbst? Warum willst du das machen? –

+0

'$ MyInvocation' ist nicht konsistent über mehrere Dateien hinweg. Vielleicht können Sie ein anderes Skript verwenden, um 'Test1.ps1',' Test2.ps1' und 'Test3.ps1' zu verketten? Sie würden dann alle im selben Kontext laufen. – sodawillow

Antwort

0

Sie könnten Get-Content-Cmdlet verwenden, denke ich. Probieren Sie etwas wie folgt aus:

WRITE-HOST "My Name is $($MyInvocation.MyCommand.Name) `n`n $(Get-Content $($MyInvocation.MyCommand.Name))" 
0

Sie könnten die folgenden Möglichkeiten, den Inhalt Ihrer Skripte zu lesen:

foreach ($File in (Get-Item -Path C:\PowerShell\* -Filter '*.ps1' | Select -ExpandProperty FullName)) 
{ 
    Write-Output "File: $File" 
    Get-Content "$File" 
} 

Die Ausgabe würde wie folgt aussehen:

PS C:\> foreach ($File in (Get-Item -Path C:\PowerShell\* -Filter '*.ps1' | Select -ExpandProperty FullName)) 
{ 
    Write-Output "File: $File" 
    Get-Content "$File" 
} 
File: C:\PowerShell\test.ps1 
test1 contents 
File: C:\PowerShell\test2.ps1 
test2 contents 
File: C:\PowerShell\test3.ps1 
test3 contents