PowerShell中的变量

时间:2015-06-26 20:11:39

标签: powershell

我正在编写一个PowerShell脚本,可以复制昨天的日志并对其进行压缩。我的问题是我有一个我需要复制的大量不同文件夹列表。我想做GCI "L:\sites"之类的事情并将每个文件夹和管道传递给变量,因此我可以使用$Path之类的变量而不是硬路径。 "L:\sites\$path\log"并将它们分别复制到自己的L:\logTemp\$Path中。然后让压缩部分分别压缩每个文件夹。

下面的当前脚本:

Robocopy "l:\sites\TNSERVICE\log" "L:\LogTemp\TNSERVICE" /s /copy:DAT /Maxage:1
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"  
$Date = Get-Date
$Date = $Date.adddays(-1)
$Date2Str = $Date.ToString("yyyMMdd")
sz a -mx=9 "L:\LogTEMP\TNSERVICE $Date2Str.zip" "L:\LogTEMP\TNSERVICE\*"
remove-item L:\LogTemp\TNSERVICE -recurse

1 个答案:

答案 0 :(得分:1)

这看起来像是foreach的工作。

使用您上面所述的内容,看起来您需要的是:

# Get the list of directories (you could use a filter here to match a pattern)
$sites = Get-ChildItem L:\sites -Directory

# Loop through each object in $sites and perform a series of actions
foreach ($dir in $sites) {
    # This is all your original code, I've just changed to use variables
    Robocopy "$dir.Fullname\log" "L:\LogTemp\$dir.Name" /s /copy:DAT /Maxage:1
    set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"  
    $Date = Get-Date
    $Date = $Date.adddays(-1)
    $Date2Str = $Date.ToString("yyyMMdd")
    sz a -mx=9 "L:\LogTEMP\$dir.Name $Date2Str.zip" "L:\LogTEMP\$dir.Name\*"
    remove-item L:\LogTemp\$dir.Name -recurse
}

我在这里真正做的就是围绕你编写的内容包装一个foreach循环,并用变量名替换一些路径。如果你运行它,它应该在foreach循环中执行从Get-ChildItem返回的每个目录名称的所有内容。