gpt4 book ai didi

powershell - 使用文件和目录的函数的惯用参数类型

转载 作者:行者123 更新时间:2023-12-04 18:34:40 25 4
gpt4 key购买 nike

如果我正在编写“惯用的”PowerShell,我会为处理文件或目录的函数使用哪些参数类型?

例如,我制作了一个包含此功能的模块:

$bookmarks = @{}
$bookmarkKeys = @{}

function Set-Bookmark {
param(
[Parameter(Mandatory = $true)]
[string] $Id,
[System.Management.Automation.DirectoryInfo] $Path = (Get-Location))
$script:bookmarks[$Id] = $Path
$script:bookmarkKeys[$Path.Path] = $Id
}

问题是,以下不起作用:

PS>Set-Bookmark -Id Code -Path C:\Code
Set-Bookmark : Cannot process argument transformation on parameter 'Path'.
Cannot convert the "C:\Code" value of type "System.String" to type
"System.Management.Automation.PathInfo".
At line:1 char:29
+ Set-Bookmark -Id Code -Path C:\Code
+ ~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-Bookmark], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Bookmark

奇怪的是,这也不是(但出于稍微不同的原因):

PS>Set-Bookmark -Id Code -Path (gi C:\Code)
Set-Bookmark : Cannot process argument transformation on parameter 'Path'.
Cannot convert the "C:\Code" value of type "System.IO.DirectoryInfo" to type
"System.Management.Automation.PathInfo".
At line:1 char:29
+ Set-Bookmark -Id Code -Path (gi C:\Code)
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-Bookmark], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Bookmark

那么我是否应该将参数定义为字符串(即最小公分母),然后尝试将它们转换/解析为更有意义的类型?这听起来不对,因为如果我正在处理诸如 Get-Item 之类的结果,那就太可惜了。他们被带到 string对于传入,仅用于该函数再次解析回更高级别的类型。

最佳答案

我想你想使用类型 [IO.DirectoryInfo] .这对我来说很好:

function t {
param(
[IO.DirectoryInfo] $d
)
"You passed $d"
}

t (Get-Item "C:\Windows")

对于文件,您可以使用 [IO.FileInfo] ,尽管这不支持通配符。

关于powershell - 使用文件和目录的函数的惯用参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com