带智能参数的电源外壳功能



我想创建一个Powershell函数,它可以为一个参数接受2种不同类型的输入。

我将使用的示例是一个复制文件函数。

如果我像这样调用函数Copy-File –FileToCopy “c:test” –FileDestination “c:dest”
我希望该功能获取文件夹中的所有文件并将它们复制到目的地。

如果我像这样调用函数Copy-File –FileToCopy “c:filesToCopy.txt” –FileDestination “c:dest”

我希望该函数从文本文件中获取文件列表,然后将它们复制到文件目标。

因此,我不确定如何弄清楚的部分是如何使–FileToCopy参数变得智能并知道我给它的输入类型。复制文件的实际代码我可以做。

可能有更优雅的方法,但你可以做这样的事情:
1. 将"*"附加到参数值,并对其使用测试路径。在这种情况下,您将其视为文件夹,因此 c:\test 将变为 c:\test\*。
2一.如果 Test-Path 返回 true,则您有一个文件夹,可以继续复制其内容。
2b.如果测试路径返回 false,请转到步骤 3。
3. 对参数按原样使用测试路径。如果它返回 true,则它是一个文件。

更新
实际上,它比我想象的要简单得多。您可以将参数 PathType 与 TestPath 一起使用,并指定是要查找文件夹还是文件。
- PathType Container将查找文件夹。
- PahType Leaf将查找文件。

我会

确定它是一个文本文件还是一个文件夹,然后从那里开始。 下面的函数应该可以帮助您入门,并且在脚本运行后可以像Copy-Thing -filename "sourcefile.txt" -Destination "C:place"一样执行

Function Copy-Thing([string]$fileName,[string]$destination){
    $thing = Get-Item $fileName
    if ($thing.Extension -eq ".txt"){
        Get-Content | %{
            Copy-Item -Path $_ -Destination $destination
        }
    }
    elseif ($thing.PSIsContainer){
        Get-ChildItem -Path $fileName | %{
            Copy-Item -Path $_.FullName -Destination $destination
        }
    }
    else{
        Write-Host "Please specifiy a valid filetype (.txt) or folder"
    }
}

最新更新