1

スクリプトから net.exe を実行しようとしていますが、スペースに問題があります。これがコードです...

# Variables
$gssservers = Import-Csv "gssservers.csv"

$gssservers | Where-Object {$_.Tier -match "DB"} | Foreach-Object {
    net.exe use "\\"$_.Name '/user:'$_.Name'\Administrator' $_.Pass
    $sqlcheck = sc.exe \\$gsssql[1] query "WUAUSERV"
    }

5行目をWrite-Hostに設定すると、net.exeコマンドを壊している引用符がある場所の外側にスペースが追加されていることがわかります。これらのスペースを削除するにはどうすればよいですか?

私がこれをどのように行っているのか疑問に思われる方のために説明すると、このエンクレーブでは WMI がブロックされているため、net.exe コマンドがこれらのマシンにアクセスできる唯一の方法です。

4

2 に答える 2

0

@EdgeVBのソリューションを使用して、最終的にこれを自分で解決しました。コードはこのようになりました...

# Variables
$gssservers = Import-Csv "gssservers.csv"

$gssservers | Where-Object {$_.Tier -match "DB"} | Foreach-Object {
    $cmd1 = 'use'
    $arg1 = '\\' + $_.Name
    $arg2 = ' /user:' + $_.Name + '\Administrator '
    & net.exe $cmd1 $arg1 $arg2 $_Pass
    $cmd2 = 'query'
    $svc1 = 'mssqlserver'
    & sc.exe $arg1 $cmd2 $svc1 | Write-Host
    }

事前に変数を焼き込む必要があるだけでなく、特定のしきい値を超えることもできません (たとえば、「use」と「\」が同じ変数にある場合、変数は壊れます。

于 2013-10-11T14:38:28.347 に答える