我希望在PowerShell中编写一个脚本,但是我想设置一个变量然后在我的脚本中填充变量值。更具体地说,我想要设置的变量是一个IP地址,我想将它输入到为我提取3个文件的脚本中,因为我管理着大量的计算机。以下是我想要运行的脚本中的一个文件的示例:
Copy-Item -Path '\\VariableIwantToEnterIPaddress\C$\ComputerZ\log\File.log' -Destination C:\Users\JayZ\Desktop
我放置VariableIwantToEnterIPaddress
的位置我会放置一个变量然后将其填充为IP地址。首先设置变量然后运行脚本。或者让PowerShell提示我输入值然后运行脚本。
这可能,或者有更好的方法吗?
答案 0 :(得分:0)
这应该可以解决问题
$IPs = '10.10.0.1','10.10.0.2','10.10.0.3' #Enter your IP addresses here
foreach ($ip in $IPs) {
Copy-Item "\\$($ip)\C$\ComputerZ\log\File.log" -Destination C:\Users\JayZ\Desktop
}
修改:这样可以更轻松地输入您想要的IP地址
function Copy-Files {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true,ValueFromPipeline)]
[string]$ip
)
process {
Copy-Item "\\$($ip)\C$\ComputerZ\log\File.log" -Destination C:\Users\JayZ\Desktop
}
}
用法:
'10.10.0.1','10.10.0.2','10.10.0.3' | Copy-Files
答案 1 :(得分:0)
在我看来,最简单的方法是使用Read-Host cmdlet。基本上是:
$ipaddr = Read-Host -Prompt 'IP:'
Copy-Item "\\$ipaddr\C$\ComputerZ\log\File.log" -Destination C:\Users\JayZ\Desktop
通过使用Read-Host和字符串.Split,您可以循环遍历几个IP:
$ipaddr = Read-Host -Prompt 'IP List:'
$iplist = ipaddr.Split(" ")
foreach ($ip in $iplist) {
Copy-Item "\\$ip\C$\ComputerZ\log\File.log" -Destination C:\Users\JayZ\Desktop
}
然后,只需在运行脚本时输入IP地址,并在它们之间留一个空格。
答案 2 :(得分:0)
使用脚本参数。
MyScript.ps1
[CmdletBinding()]
Param(
[Parameter(Mandatory = $True, Position = 0)]
[Alias('CN','IP')]
[System.String[]]
$ComputerName
)
ForEach ($CN in $ComputerName)
{
Copy-Item -Path "\\$CN\C$\ComputerZ\log\File.log" -Destination C:\Users\JayZ\Desktop
}
我所包含的[Parameter()]
属性强制用户输入CN / IP(如果省略)并允许您不使用命名参数:
PS C:\> MyScript.ps1 127.0.0.1
或
PS C:\> MyScript.ps1 -ComputerName 127.0.0.1
省略时:
PS C:\> MyScript.ps1
cmdlet MyScript at command pipeline position 1
Supply values for the following parameters:
ComputerName: _
最后,要针对多台PC运行,请使用以逗号分隔的列表:
PS C:\> MyScript.ps1 127.0.0.1, 168.5.3.2