1

我目前正在创建一个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"
    }
}

现在真的不能在函数之外访问所有变量吗?

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

4

1 回答 1

1

您可能缺少的是使用 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"

于 2012-04-19T23:07:48.990 回答