使用PowerShell'If'语句进行比较功能(Windows版)

时间:2012-04-19 21:39:31

标签: powershell if-statement active-directory scope comparison

我目前正在创建一个AD脚本,可以获取一台机器的AD组并将它们传输到新机器(如果系统出现故障)。

我设法让脚本出去找到两台机器通过主机名运行的Windows版本,但是我在创建一个'if'语句来比较两个版本的Windows时遇到了问题

这个想法是,如果相同的版本(因此包装版本相同),这些组将被自动复制,但我不能为我的生活找出如何做到这一点。

请考虑以下代码:

function W_version_current
{
    $current = Get-WmiObject Win32_OperatingSystem -computer $current_hostname.text | select buildnumber
    if ($current -match '7601')
    {
        "Windows 7"
    }
    elseif($current -match '2600')
    {
        "Windows XP"
    }
    elseif($current -eq $null)
    {
        "The box is empty"
    }
    else
    {
        "Function not supported"
    }
}

function W_version_target
{
    $target = Get-WmiObject Win32_OperatingSystem -computer $target_hostname.text | select buildnumber
    if ($var -match '7601')
    {
        "Windows 7"
    }
    elseif($target -match '2600')
    {
        "Windows XP"
    }
    elseif($target -eq $null)
    {
        "The box is empty"
    }
    else
    {
        "Function not supported"
    }
}

function compare_current_target
{
    if(W_version_current -eq W_version_target)
    {
        "Matching version of Windows detected"
    }
    else
    {
        "Versions of Windows do not match"
    }
}

现在是否所有变量都无法在函数外部访问?

如果是这样,我还能做什么?

1 个答案:

答案 0 :(得分:0)

您可能缺少的是,使用PowerShell操作顺序,您经常需要将函数调用放在括号中。

请改为尝试:

if ((W_version_current) -eq (W_version_target))
{
    "Matching version of Windows detected"
}
else
{
    "Versions of Windows do not match"
}

要回答您的问题,PowerShell中的范围与大多数其他脚本语言非常相似,例如:在函数中声明的变量不能在它们声明的函数之外使用,除非你将它们声明为全局变量,你可以这样做:

$global:x = "hi"

然后,您可以随时随地使用变量$x,或者如果您愿意,可以使用$global:x,它的值为"hi"