powershell中的变量 - 将变量添加到脚本

时间:2018-03-15 18:03:13

标签: powershell

我希望在PowerShell中编写一个脚本,但是我想设置一个变量然后在我的脚本中填充变量值。更具体地说,我想要设置的变量是一个IP地址,我想将它输入到为我提取3个文件的脚本中,因为我管理着大量的计算机。以下是我想要运行的脚本中的一个文件的示例:

Copy-Item -Path '\\VariableIwantToEnterIPaddress\C$\ComputerZ\log\File.log' -Destination C:\Users\JayZ\Desktop

我放置VariableIwantToEnterIPaddress的位置我会放置一个变量然后将其填充为IP地址。首先设置变量然后运行脚本。或者让PowerShell提示我输入值然后运行脚本。

这可能,或者有更好的方法吗?

3 个答案:

答案 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