我知道这个问题已被多次询问,但我的要求与我在这里和谷歌上读到的略有不同。
我有以下文件夹结构。
c:\weblogs\Servers\Server1
c:\weblogs\Servers\Server2
服务器1文件夹可能包含以下文件夹:
W3SVC1
W3SVC2
W3SVC3
服务器2将具有类似的文件夹结构。
我正在尝试创建一个脚本,该脚本会查看超过30天的W3SVC*
个文件的每个.log
文件夹。
然后在每个此类Oldlogs-Server*-W3SVC*.zip
子文件夹中创建一个名为W3SVC*
的zip文件,并将旧日志移动到该文件。在第二次运行时,它只会将超过30天的任何新文件移动到相应的zip文件。
我不是开发人员,但如果没有可用的现有脚本,任何示例或建议都会有所帮助。
这是我认为最接近我想要达到的目标的脚本:
它目前抛出错误:
“\ WebApps \ LogHarvest \ pkzipc.exe需要”
# Alias for pkzip
if (-not (test-path "$env:F:\WebApps\LogHarvest\pkzipc.exe")) {
throw "$env:F:\WebApps\LogHarvest\pkzipc.exe needed"
}
set-alias sz "$env:WebApps\LogHarvest\pkzipc.exe"
############################################
#### Variables
$filePath = "F:\Weblogs\Test"
$log = Get-ChildItem -Recurse -Path $filePath | Where-Object { $_.Extension -eq ".log" }
########### END of VARABLES ##################
foreach ($file in $log) {
$name = $file.name
$directory = $file.DirectoryName
$zipfile = $name.Replace(".log",".7z")
sz a -t7z "$directory\$zipfile" "$directory\$name"
}
########### END OF SCRIPT ##########
答案 0 :(得分:0)
if (-not (test-path "$env:F:\WebApps\LogHarvest\pkzipc.exe")) { throw "$env:F:\WebApps\LogHarvest\pkzipc.exe needed" } set-alias sz "$env:WebApps\LogHarvest\pkzipc.exe"
您正在测试路径$env:F:\WebApps\LogHarvest\pkzipc.exe
,其评估结果为\WebApps\LogHarvest\pkzipc.exe
,因为您可能没有环境变量$env:F
。因此,您的脚本正在查找当前驱动器上的可执行文件,该文件很可能是C:
而不是F:
。这就是导致您观察到错误的原因。
下一个语句尝试设置别名$env:WebApps\LogHarvest\pkzipc.exe
。如果您实际拥有环境变量$env:WebApps
,请将代码更改为:
$pkzip = "$env:WebApps\LogHarvest\pkzipc.exe"
if (-not (Test-Path $pkzip)) {
throw "$pkzip needed"
}
Set-Alias sz $pkzip
如果您没有该环境变量,请将代码更改为:
$pkzip = "F:\WebApps\LogHarvest\pkzipc.exe"
if (-not (Test-Path $pkzip)) {
throw "$pkzip needed"
}
Set-Alias sz $pkzip
作为旁注:不是为脚本创建别名,而是使用带有调用运算符(&
)的可执行文件的变量:
& $pkzip a -t7z "$directory\$zipfile" "$directory\$name"
另外,我不确定pkzipc
是否可以实际处理7z档案。或者如果它首先支持参数a -t7z
。那些看起来像7zip程序的参数给我。