我陷入了一个可能很愚蠢的问题:( 基本上我有一个写一些输出的函数,我会在函数输出后用Read-Host命令退出脚本之前等待。
您在这里是代码:
Function Get-FileMetaData {
<# modified script from:
NAME: Get-FileMetaData
AUTHOR: ed wilson, msft
LASTEDIT: 01/24/2014 14:08:24
Http://www.ScriptingGuys.com
Requires -Version 2.0
#>
Param($folders)
$tagList = @()
$tagListUnique = @()
foreach($folder in $folders) {
$i = 18 # attribute for Tags
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($folder.FullName)
foreach ($file in $objFolder.items()) {
if($objFolder.getDetailsOf($File, $i)) {
$objEntry = New-Object System.Object
$objEntry | Add-Member -type NoteProperty -name File -value $file.Path
$objEntry | Add-Member -type NoteProperty -name Tags -value $objFolder.getDetailsOf($File, $i)
$tagList += $objEntry
$tagListUnique += ($objFolder.getDetailsOf($File, $i) -split ";").trim()
}
}
}
Write-Output $tagList
Write-Output ""
Write-Output "unique tags"
Write-Output "-----------"
$tagListUnique | Sort-Object -unique
Read-Host "Press ENTER to exit"
}
$baseFolder = "C:\MyPictures"
Write-Host ""
Write-Host "Base folder: " $baseFolder
Get-FileMetaData -folder (Get-ChildItem $baseFolder -Recurse -Directory)
基本上它打印出最终语句&#34;按ENTER退出&#34;在$ tagList数组之前。
我想完全相反,就像在代码中写的顺序一样。凭借我有限的ps技能,我理解在输出的不同管理中有相关的东西&#34; stream&#34;和输入,但我无法弄清楚如何&#34;冲洗&#34;在主机写入之前的所有输出。
提前致谢
答案 0 :(得分:0)
试试这个:
->get('question_text', null)
在执行函数后放入读取主机,将其输出到控制台,然后等待读取主机完成。
结果:
我已经更新了上面的代码,将[PSCustomObject]包含在Write-Output中,并且在最后添加了一个Out-String,一切正常。如果有效,请告诉我!
答案 1 :(得分:0)
不确定Write-Host和Out-Host之间的技术差异是什么,但我通过将customobject($ oOptions)传递给Out-Host来解决这个问题。例如:
Write-Output "Set subscription:"
$oSubscriptions = Get-AzureRmSubscription
If($Subscriptions.count -gt 1)
{
Write-Verbose "Multiple subscriptions found. "
$i=1
$oOptions = @()
$oSubscriptions | ForEach-Object{
$oOptions += [pscustomobject]@{
Item = $i
SubscriptionName = $_.SubscriptionName
}
$i++
}
$oOptions | Out-Host
$selection = Read-Host -Prompt "Please make a selection"
$Selected = $oOptions | Where-Object{$_.Item -eq $selection}
$ActiveSubscription = Select-AzureRmSubscription -SubscriptionName $Selected.SubscriptionName
$ActiveSubscription
Write-Output "Subscription '$($ActiveSubscription.Subscription.SubscriptionName)' active."
}
else
{
$Subscriptions | Select-AzureRmSubscription | Out-Null
}
希望有所帮助。