1

現在、1 台のマシンの AD グループを取得して新しいマシンに転送できるADスクリプトを作成しています (システム障害の場合)。

スクリプトを実行して、ホスト名を介して 2 台のマシンが実行している Windows のバージョンを見つけることができましたが、Windows の 2 つのバージョンを比較するための「if」ステートメントの作成に問題があります。

アイデアは、同じバージョン (したがって同じパッケージ バージョン) の場合、グループは自動的にコピーされるということですが、私の人生ではそれを行う方法を理解することはできません。

このコードを検討してください:

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 に答える