Function Get PowerShell函数在运行期间将表写入屏幕,但不作为返回追加
下面是一个简短的示例(我的实际代码要求我在函数运行期间输出更多的表,并从中获得一个返回的输出): 它不是在函数中输出Function Get PowerShell函数在运行期间将表写入屏幕,但不作为返回追加,function,powershell,Function,Powershell,下面是一个简短的示例(我的实际代码要求我在函数运行期间输出更多的表,并从中获得一个返回的输出): 它不是在函数中输出$CSV,而是附加到返回中,并进入函数插入的变量 PS C:\Windows\system32> $ROW = Select-RowFromCSV -CSV (Import-Csv "C:\scripts\csv.csv") select row # from CSV: 0 PS C:\Windows\system32> $ROW Name Phon
$CSV
,而是附加到返回中,并进入函数插入的变量
PS C:\Windows\system32> $ROW = Select-RowFromCSV -CSV (Import-Csv "C:\scripts\csv.csv")
select row # from CSV: 0
PS C:\Windows\system32> $ROW
Name Phone
Dan 111111
Dave 5555555
Oliver 666666
Dan 111111
PS C:\Windows\system32>
我尝试了多种方法尝试将其打印到屏幕上,但与写入主机对字符串的预期效果不同,我尝试的其他方法都不适用于非字符串对象(FT、写入输出、回显)。如果您希望在不影响函数输出的情况下将内容输出到控制台,
Write Host
可能是最简单的解决方案(但事实并非如此)。您的代码需要如下所示:
Function Select-RowFromCSV ($CSV)
{
Write-Host ($CSV | Format-Table | Out-String)
Return $CSV[(read-host "select row # from CSV")]
}
$ROW = Select-RowFromCSV -CSV (Import-Csv "raid.csv")
正如您所观察到的,因为您的对象不是字符串,所以您需要根据需要对其进行格式化,然后将其转换为字符串(| Format Table | Out string
)
但是,您可能需要考虑使用<代码>写VBBOSE ,这将仅在使用冗长的开关时,将输出写入到冗长的流中。要使用此函数,您需要向函数中添加
[cmdletbinding()]
和Param()
块,如下所示:
Function Select-RowFromCSV
{
[cmdletbinding()]
Param($CSV)
Write-Verbose ($CSV | Format-Table | Out-String)
Return $CSV[(read-host "select row # from CSV")-1]
}
然后使用-Verbose开关执行函数以查看额外的输出:
$ROW = Select-RowFromCSV -CSV (Import-Csv "raid.csv") -Verbose
进一步解释:
在原始函数中,您输出了所有的$CSV
,因为它单独出现在一行上,然后还返回了一行。在PowerShell中,Return
关键字有点误导,它没有定义只返回的内容,它只是触发函数立即结束,输出的任何内容都将进入输出流
您还应该注意,用户输入的行号需要从0开始,因为数组索引从0开始
如果希望第一行为1而不是0,则可能需要执行以下操作:
$CSV[(read-host "select row # from CSV")-1]
您也可以完全删除
Return
关键字,因为这不是必需的。如果您想更明确,我个人倾向于写输出
只需使用以下方法:
$counter=0
$table=@()
XXX | foreach对象{
做点什么;
$table+=[pscustomobject]@{
XXXX
}
$table[$counter]
美元柜台++
}
用Out-Gridview代替-passthru
选项来选择行怎么样$ROW=Import Csv“C:\scripts\Csv.Csv”| Out GridView-PassThru
谢谢@mark!,非常感谢。你为我节省了几个小时重新编写函数,就像我最后几乎完成的那样。你可能还想看看gridview以获得更图形化的选项,我认为你可以从中捕获用户选择。是的,你只需使用-passthru
$CSV[(read-host "select row # from CSV")-1]