如何在powershell 3.0中使用out-file命令时使用SaveFileDialog

问题描述 投票:0回答:1

我的输出代码在PowerShell 3.0中运行时遇到问题。我看了一遍,似乎无法找到答案。我想使用SaveFileDialog来帮助输出文件。这是一个更大的代码的一部分,它会询问用户是否要在导入之前导出。它用于从交换输出代码。下面是我得到的代码。它有效,但它有两个弹出的对话框,任何人都可以对此有所了解吗?

[string]$Export = Read-Host "Would you like to export? [y/n]"
IF ($Export -eq "y")
    {
      Function Get-FileName($initialDirectory)
        {   
         [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
         Out-Null

         $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
         $SaveFileDialog.initialDirectory = $initialDirectory
         $SaveFileDialog.filter = “Text files (*.txt)|*.txt|All files (*.*)|*.*”
         $SaveFileDialog.ShowDialog() | Out-Null
         $SaveFileDialog.filename
        }

        Get-FileName -initialDirectory "%USERDATA%\desktop\"
        $Savefile = Get-Filename

get-mailboxfolderpermission -identity $Email":\" | ft foldername, User, AccessRights -AutoSize | out-file $Savefile -Append -Width 500
Foreach ($Folder in $folders)
    {
    $NormalizedFolder = $Folder.FolderPath.Replace("/","\")
    $NormalizedIdentity = $Email + ":" + $NormalizedFolder
    get-mailboxfolderpermission -identity $NormalizedIdentity | ft foldername, User, AccessRights -AutoSize | out-file $Savefile -Append -Width 500
    }
}
powershell powershell-v3.0
1个回答
1
投票

答案是你连续两次调用该函数。你的路线:

Get-FileName -initialDirectory "%USERDATA%\desktop\"

没有为该功能设置一些设置,它正在调用它,并指定初始目录。它不会保存响应或对其执行任何操作,因此文本应该只返回到屏幕。然后你的下一行:

$Savefile = Get-Filename

再次调用相同的函数,这次没有指定初始目录,并将响应保存在$SaveFile变量中。

删除第一个Get-File -initialDirectory线,并将-initialdirectory $env:UserProfile\Desktop添加到$Savefile =线。

编辑:我想我会评论将函数放在脚本顶部是相当标准的做法。这样,它们首先被处理,并且可以根据需要通过整个脚本随时可用。将它放在IF语句中意味着它可能永远不会加载,如果你想在稍后的脚本中使用它,它就不会存在。将它移到顶部并在以后需要时可用它通常没有害处。

© www.soinside.com 2019 - 2024. All rights reserved.