我有一個在 PowerShell 7 中運行的腳本(以獲得更好的 Unicode 支持),由于某些 DLL 不兼容,我需要在 PowerShell 5 中運行某批命令。這意味著(afaik)我不能使用點源。
PowerShell 7 呼叫代碼:`
$files = powershell.exe -ExecutionPolicy Bypass -File "$PSScriptRoot\FileInfo.ps1" -Path $FolderToProcess -Title $moduleTitle -GUID $guid
FileInfo.ps1遍歷一組檔案并回傳一個陣列PSCustomObject
$arr = @()
foreach ($file in $finalFiles) {
$item = [PSCustomObject]@{
i = $file.i
j = $file.j
k = $file.k
}
$arr = $item
}
return $arr
但是,當我嘗試$files在呼叫腳本中使用該變數時會發生什么,被呼叫腳本的結果實際上是一個字串陣列并且沒有用。
我該怎么做:
A) 告訴呼叫腳本腳本的結果應該是一個陣列;或者
B)“發送”腳本是否沒有將結果作為字串處理并按預期傳回陣列?
uj5u.com熱心網友回復:
您可以在被呼叫者中序列化物件(陣列)并在呼叫者中反序列化它。
(順便說一句:盡量避免使用遞增賦值運算子 ( =) 創建集合)
被呼叫者( FileInfo.ps1)
$arr = foreach ($file in $finalFiles) {
[PSCustomObject]@{
i = $file.i
j = $file.j
k = $file.k
}
}
[System.Management.Automation.PSSerializer]::Serialize($Arr)
呼叫者(PowerShell 7 呼叫代碼)
$PSSerial = powershell.exe -ExecutionPolicy Bypass -File "$PSScriptRoot\FileInfo.ps1" -Path $FolderToProcess -Title $moduleTitle -GUID $guid
$Files = [System.Management.Automation.PSSerializer]::Deserialize($PSSerial)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527290.html
標籤:数组电源外壳
