powershell循环遍历文件并对其执行命令



我正在研究如何循环遍历一组文件并对这些文件执行一个程序,该程序在扫描hyper-v虚拟硬盘时输出一个日志和tar文件。

我已经发现的是:在一个卷上收集所有VHDX。把它们放到一个变量中

然而,我被困在处理foreach,并有一个灵活的输出的tar文件和日志名称。

的例子:

Get-ChildItem -Path $VDHXPath -Filter $Extension -Recurse -ErrorAction SilentlyContinue -Force | % { $_.FullName }

其中$VHDXPath表示一个可自定义变量,该变量表示驱动程序。这样我得到一个变量填充一个或多个VHDX。

那么我需要对查询/库存的VHDX执行程序。平面单文件/直命令行如下:

win.exe guid -o "tarfile.tar" -l "logfile.log" -p default --history "pathtovhdxfile.vhdx"

所以我已经尝试了许多关于如何执行foreach和调用命令来与VHDX对话的变体。例子:

Foreach ($file in $files){
Start-Process -NoNewWindow -FilePath ".win.exe" -ArgumentList "guid -o tarfile.tar -l logfile.tar -p default --history vhdxfile.vhdx"
}

其中tar文件和日志文件的输出,必须与正在处理的VHDX的名称相匹配。

我也试过:

Foreach ($file in $files){
& ".win.exe" "guid -o tarfile.tar -l logfile.tar -p default --history vhdxfile.vhdx"
}

可惜没有结果。我得到的提示要么是这个程序不是一个有效的powershell命令行,要么是一个可执行的程序。或者程序本身的反应是tarfile, logfile和vhdxfiles无效,因为命令行一次占用所有VHDX'。

目标是获取包含它所处理的每个VHDX的名称的tar和日志文件。

如有任何指导,将不胜感激

编辑:

我要走远一点了:

$VDHXPath = "C:Users%USERNAME%"
$Extension = "*.VHDX"
Foreach ($file in Get-ChildItem -Path $VDHXPath -Filter $Extension -Recurse -ErrorAction SilentlyContinue -Force | % { $_.FullName }) {

& .win.exe guid -o '.$file.name'.tar -l '.$file.name'.log -p default --history $file
}

所以现在程序遍历文件,但我只是在per VHDX日志文件名和tar文件名中挣扎。

使用$file.BaseName获取不带扩展名的文件名。要在可扩展字符串中展开成员表达式(如$file.FullName),请使用$()子表达式操作符:

Foreach ($file in Get-ChildItem -Path $VDHXPath -Filter $Extension -Recurse -ErrorAction SilentlyContinue -Force) {
$basename = $file.BaseName
& .win.exe guid -o ".${basename}.tar" -l ".${basename}.log" -p default --history "$($file.FullName)"
}

相关内容

  • 没有找到相关文章

最新更新