相关疑难解决方法(0)

如何在PowerShell中捕获信号?

这可能吗?我终于决定开始建立我个人的.NET开发环境,以更接近地模仿我如何建立一个*NIX开发环境,这意味着要认真学习Powershell.

我正在编写一个函数,通过文件系统进行递归,设置工作目录,以便构建东西.困扰我的一件小事是,如果我将Ctrl + C排除在函数之外,它会让我离开脚本最后的位置.我已经尝试设置一个trap块,在运行时将dir更改为起始点,但这似乎只是在Exception上打算(和触发).

如果这是一种在Unix中具有root权限的语言,我会设置一个信号处理程序SIGINT,但我在Powershell中找不到任何类似的搜索.戴上我的.NET上限,我想象有一些事件,我可以附加一个处理程序,如果我不得不猜测,这是一个事件$host,但我找不到任何规范文档System.Management.Automation.Internal.Host.InternalHostUserInterface,并且没有任何关于我能够搜索的轶事是有帮助的.

也许我错过了一些完全明显的东西?

powershell

10
推荐指数
2
解决办法
5552
查看次数

Powershell功能处理或中止处理程序

我有一个管道函数,它在begin块中分配一些需要在最后处理的资源.我已尝试在end块中执行此操作但在函数执行中止时不会调用它,例如ctrl+ c.

如何修改以下代码以确保$sw始终处置:

function Out-UnixFile([string] $Path, [switch] $Append) {
    <#
    .SYNOPSIS
    Sends output to a file encoded with UTF-8 without BOM with Unix line endings.
    #>
    begin {
        $encoding = new-object System.Text.UTF8Encoding($false)
        $sw = new-object System.IO.StreamWriter($Path, $Append, $encoding)
        $sw.NewLine = "`n"
    }
    process { $sw.WriteLine($_) }
    # FIXME not called on Ctrl+C
    end { $sw.Close() }
}
Run Code Online (Sandbox Code Playgroud)

编辑:简化功能

powershell cmdlets

3
推荐指数
1
解决办法
704
查看次数

标签 统计

powershell ×2

cmdlets ×1