RKi*_*azy 3 powershell powershell-5.0
我最近遇到过这篇文章,但是它已经很旧了,我想你们都希望我开始新的话题。
基本上,我正在编写用于部署WIM的PS脚本。我们将UNC路径映射为映射的驱动器,然后运行一个批处理文件,该文件搜索特定文件并根据其路径创建变量。变量到位后,脚本将继续使用该变量。批处理文件中的代码示例如下所示:
FOR %%i IN (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%i:\Win10.wim SET _WIMLocation=%%i:
Run Code Online (Sandbox Code Playgroud)
如何在PS中复制类似内容?通常,我会硬编码驱动器号,但是如果其他人使用其他字母映射驱动器,则脚本会中断。因此,这就是为什么它会搜索驱动器号的原因...
这是在PowerShell中执行此操作的一种方法:
首先,您将使用驱动器号组成一个阵列。通过用双引号或双引号引起来的每个字母将是一个字符串,然后使用逗号分隔每个值,以便该变量将是一个字符串数组。
$Drives = "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
Run Code Online (Sandbox Code Playgroud)
然后使用foreach循环,循环遍历数组的每个值。
foreach ($Drive in $Drives) {
Run Code Online (Sandbox Code Playgroud)
然后使用一条if语句进行测试,然后在其中if可以测试Test-Pathcmdlet 是否存在文件夹或文件。该${}是让我可以把变量引号内,拥有这一切是一个字符串,不分析器由感到困惑:。或者,您可以使用级联构建路径,Test-Path $($Drive + ":\win10.wim")其中where $()是首先要评估的子表达式,然后+运算符将连接两个字符串。
if (Test-Path "${Drive}:\Win10.wim") {
Run Code Online (Sandbox Code Playgroud)
最后,可以$Drive在if语句成功后将变量设置为等于该变量
$WIMLocation = $Drive
}
}
Run Code Online (Sandbox Code Playgroud)
总共是这样的:
$Drives = "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
foreach ($Drive in $Drives) {
if (Test-Path "${Drive}:\Win10.wim") {
$WIMLocation = $Drive
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |