当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中扩展外部脚本

作者:精品下载站 日期:2024-12-14 07:57:43 浏览:14 分类:玩电脑

在 PowerShell 中扩展外部脚本


我一直在寻找使用 PowerShell 做更多事情的方法。通常,一旦我找到一种技术,我就会寻找可以应用它的其他领域。我希望今天对你来说也是这样。您可能不需要在本文中重复我的工作,但希望您能认识到这些技术和概念的价值,并找到自己的应用方法。我感兴趣的是扩展和改进 PowerShell 结果。

在 PowerShell 中,有不同类型的命令。一种类型是外部脚本。这些是 PowerShell 脚本文件,无需指定路径即可运行。

[玩转系统] 在 PowerShell 中扩展外部脚本

[玩转系统] 在 PowerShell 中扩展外部脚本

Get-Command profile.ps1 | 
Select-Object -property Name,Path,@{Name="LastWriteTime";Expression={(Get-Item $_.path).lastWriteTime}},
@{Name="Location";Expression={Split-Path $_.source}}

跟踪管道中的对象非常重要。 Get-Command 正在将 System.Management.Automation.ExternalScriptInfo 对象写入管道。我已经知道一些我可以使用的属性。但我还使用哈希表来定义新属性。我正在创建一个名为 LastWriteTime 的属性。该值是我使用 Get-Item 获取的文件对象的 LastWriteTime 值。我还创建了一个名为 Location 的属性,它将成为脚本的父目录。

[玩转系统] 在 PowerShell 中扩展外部脚本

Get-Command -CommandType ExternalScript |Select-Object -property Name,Path,
@{Name="LastWriteTime";Expression={(Get-Item $_.path).lastWriteTime}},
@{Name="Location";Expression={Split-Path $_.source}} | 
Sort-Object -Property Location |
Format-Table -GroupBy Location -property Name,LastWriteTime

[玩转系统] 在 PowerShell 中扩展外部脚本

我将使用 PSTypeExtensionTools 模块中的命令,您可以从 PowerShell 库安装该模块。它可以在 Windows PowerShell 和 PowerShell 7 中运行,甚至可以跨平台运行。这是我的代码。

$tname = "System.Management.Automation.ExternalScriptInfo"
Add-PSTypeExtension -TypeName $tname -MemberType ScriptProperty -MemberName Location -Value {Split-Path $this.source}
Add-PSTypeExtension -TypeName $tname -MemberType ScriptProperty -MemberName Target -Value {
    $f = Get-Item $this.source
    #Use the target if the file is linked
    if ($f.Target) {
        $f.target
    }
    else {
        #use the full name
        $f.fullname
    }
}
Add-PSTypeExtension -TypeName $tname -MemberType ScriptProperty -MemberName LastWriteTime -Value {
    $f = Get-Item $this.source
    if ($f.Target) {
        (Get-Item -path $f.target).LastWriteTime
    }
    else {
        $f.LastWriteTime
    }
}

是的,您可以使用 Add-Member 执行类似的操作。但现在看看我的 PowerShell 命令是多么简单。

[玩转系统] 在 PowerShell 中扩展外部脚本

在我的系统上,我有一些带有符号链接的脚本,这就是我显示 Target 属性的原因。

这些更改仅在此 PowerShell 会话中有效。如果我一直想要它们,我必须将代码插入到配置文件脚本中。不过,我可以简化这一过程,因为我可以将扩展导出到 json 文件。

Get-PSTypeExtension -TypeName $tname | Export-PSTypeExtension -Path c:\scripts\externalscriptinfo.json

然后在我的个人资料中,我可以用一行代码将它们引入。

Import-PSTypeExtension C:\scripts\externalscriptinfo.json

但是等等……还有更多!还记得之前那个将外部脚本格式化为分组表的尴尬命令吗?我也可以简化它。
如果没有,请从 PowerShell 库安装 PSScriptTools 模块。然后,您可以使用 New-PSFormatXML 命令创建自定义格式文件。

Get-Command mybackuppending.ps1 | New-PSFormatXML -Path c:\scripts\externalscriptinfo.format.ps1xml -Typename $tname -GroupBy Location -Properties Name, Target, LastWriteTime -ViewName location -FormatType table

在我的 PowerShell 配置文件脚本中,我将导入此文件。

Update-FormatData C:\scripts\externalscriptinfo.format.ps1xml

看看现在这有多容易。

[玩转系统] 在 PowerShell 中扩展外部脚本

我希望这能激励您改造 PowerShell,让您的生活和工作更轻松。祝你好运!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯