我想编写一个获得以下参数作为输入的 powershell 脚本:
要复制的文件夹、扩展允许、要复制到的文件夹和一个布尔值,指示更改是否应重新启动 IIS、用户名和密码。
考虑到我要复制到远程服务器,我应该查看哪些 cmdlet?
如何将参数读入变量?
如何重新启动 IIS?
考虑到我可能想要复制多个文件夹,我该如何编写一个调用 powershell 脚本的 powershell 脚本?
Ric*_*ard 30
Get-ChildItem
允许您列出文件和目录,包括递归地使用文件名过滤器。Copy-Item
允许您复制文件。
在选择文件方面有很多重叠,通常Copy-Item
根据您需要的细节(例如,您想保留文件夹结构吗?)
将所有*.foo
和*.bar
从 StartFolder复制到 DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Run Code Online (Sandbox Code Playgroud)
如果您需要保留文件夹结构,事情会变得更加困难,因为您需要构建目标文件夹名称,例如:
$sourcePath = 'C:\StartFolder'
$destPath = 'C:\DestFolder'
Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object `
{
$destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath)
if (!(Test-Path $destDir))
{
New-Item -ItemType directory $destDir | Out-Null
}
Copy-Item $_ -Destination $destDir
}
Run Code Online (Sandbox Code Playgroud)
但robocopy
可能更容易:
robocopy StartFolder DestFolder *.foo *.bar /s
Run Code Online (Sandbox Code Playgroud)
最后,选择的方式将取决于需要什么的细节。
(在上面我已经避免了别名(例如,Copy-Item
而不是copy
)并明确使用参数名称,即使它们是位置。)
我无法解决 IIS 部分,但保留目录结构的文件副本可能比其他答案中显示的要简单得多:
Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container
Run Code Online (Sandbox Code Playgroud)
该-Container
参数是魔部分将复制结构在目的地,因为它是在源。
归档时间: |
|
查看次数: |
89675 次 |
最近记录: |