写主机后的Powershell读主机

时间:2016-02-22 22:14:37

标签: powershell

我陷入了一个可能很愚蠢的问题:( 基本上我有一个写一些输出的函数,我会在函数输出后用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;在主机写入之前的所有输出。

提前致谢

2 个答案:

答案 0 :(得分:0)

试试这个:

->get('question_text', null)

在执行函数后放入读取主机,将其输出到控制台,然后等待读取主机完成。

结果:

enter image description here

我已经更新了上面的代码,将[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
}

希望有所帮助。