Ich habe Powershell-Community-Erweiterungen installiert, weil ich Show-Tree
für diesen Code verwenden möchte.Wie erhält man Powershell, um pscx-Module zu erkennen?
# Log project state
# Assumes CWD is the project file
$Tree = Show-Tree -ShowProperty -ShowLeaf | Where-Object {$_ -inotmatch '^.*Property.*' -or $_ -match '^.*LastWriteTime\s.*'}
$i = 0
$culture = [Globalization.CultureInfo]::InvariantCulture
foreach($entry in $Tree){
if($entry -notmatch '^.*Property.*'){
$d = "{0:hh}:{0:mm}:{0:ss}" -f ([DateTime]::Parse($($Tree[$i+1] -replace '^.+=\s(.+)','$1'), $culture))
$Tree[$i] = "$d`t$entry"
}
$i++
}
$Tree = $Tree | Where-Object {$_ -inotmatch '^.*Property.*'}
foreach($s in $Tree){Write-Output $s}
Dies funktioniert in einer PS-Debug-Sitzung in VS-Code OK, aber wenn ich versuche, es in MSBuild zu verwenden oder mit der Powershell-Eingabeaufforderung, klagt er, dass es nicht das Erweiterungsmodul ...
findetShow-Tree : The term 'Show-Tree' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\Users\Admin\Documents\GitHub\powershell-scripts\ProjectSnapShot.ps1:6 char:9
+ $Tree = Show-Tree -ShowProperty -ShowLeaf | Where-Object {$_ -inotmat ...
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Show-Tree:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
überprüfte ich die PSModulePath env Variable und es zeigt auf zwei gültige loctions, eine der Standardmodule und die anderen pscx Module ...
Laut the docs sollte dies bedeuten, dass das Modul automatisch geladen wird.
Im Allgemeinen können Sie bestimmen, wo Sie Ihre Modul, indem Sie einen der Pfade in der $ ENV gespeichert installieren sollten: PSModulePath Variable. Wenn Sie einen dieser Pfade verwenden, kann PowerShell das Modul automatisch finden und laden, wenn ein Benutzer in seinem Code anruft. Wenn Sie Ihr Modul an einem anderen Ort speichern, können Sie die PowerShell explizit an weiterleiten, indem Sie das Modul als Parameter übergeben, wenn Sie das Install-Module aufrufen.
Wie kann ich dies von der PS-Eingabeaufforderung zu arbeiten und wenn von MSBuild aufgerufen?
Powershell ist eine sitzungsorientierte Sprache. Das heißt - es verhält sich manchmal anders, wenn es interaktiv und von der Kommandozeile aus ausgeführt wird. Es kann in verschiedenen Hosts anders ausgeführt werden. Einige Powershell-IDEs (leider nicht VS) erlauben das Zurücksetzen von Runspace, was zu vorhersagbaren Ergebnissen führt. In einigen Fällen - wie Typ-Alias-Caching - hilft nur der Neustart. –