2012-08-07 87 views
0

我想創建一個可以爲一個參數輸入2種不同類型輸入的PowerShell功能。帶智能參數的Powershell功能

我將使用的示例是一個複製文件功能。

如果我打電話這樣的功能Copy-File –FileToCopy 「c:\test」 –FileDestination 「c:\dest」
我想獲得該文件夾中的所有文件並將其複製到目的地的功能。

如果我這樣調用Copy-File –FileToCopy 「c:\filesToCopy.txt」 –FileDestination 「c:\dest」

的功能,我想該函數以獲取從文本文件中的文件列表,然後將它們複製到filedestination。

所以我不知道如何弄清楚如何讓-FileToCopy參數變得智能,並知道我給了它什麼類型的輸入。 我可以做的複製文件的實際代碼。

回答

1

可能有更優雅的方法,但你可以做這樣的事情:
1.追加「*」到你的參數值,並使用測試路徑。在這種情況下,您將其視爲一個文件夾,因此c:\ test將變爲c:\ test \ *。 2a。如果測試路徑返回true,您有一個文件夾並可以繼續複製其內容。
2b。如果測試路徑返回錯誤,請轉到步驟3.
3.按照原樣對參數使用Test-Path。如果它返回true,那麼它是一個文件。

更新
實際上,它比我想象的要簡單得多。您可以在TestPath中使用參數PathType,並指定您是在查找文件夾還是文件。
- PathType Container將查找文件夾。
- PahType Leaf將查找文件。

+0

感謝您的幫助,我會那樣做。 – justinf 2012-08-07 19:26:57

0

我想確定它是一個文本文件還是一個文件夾,然後從那裏開始。下面的功能應該讓你開始和腳本運行後,它可以執行像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" 
    } 
}