1. export-clixmlを介し
てバックアップとしてエクスポートされたサードパーティのコマンドレットからのデータを含むこれらの XMLファイルがあります。 それらは次のようになります (より多くのオブジェクトがある場合のみ):
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>Deserialized.System.Object</T>
</TN>
<ToString>OldDomain\UserName</ToString>
<Props>
<S N="AdministratorName">OldDomain\UserName</S>
<Obj N="AdministratorType" RefId="1">
<TN RefId="1">
<T>Deserialized.System.Enum</T>
<T>Deserialized.System.ValueType</T>
<T>Deserialized.System.Object</T>
</TN>
<ToString>Full</ToString>
<I32>1</I32>
</Obj>
</Props>
</Obj>
</Objs>
2 . 私は通常、これらをimport -clixml でインポートし、これらのサードパーティ コマンドレットに再度パイプしてデータを再作成します。よく働く。
3 . これらを使用する前に、 *OldDomain* を *NewDomain*に置き換える必要があります。
だから私はデータをインポートしてから値を置き換えます:
foreach ($prop in $subobj.psobject.properties) {
If ($prop.Value -match $oldval) {
$prop.Value = ($prop.Value) -replace ($oldval,$newval)
}
}
これは理論的には機能し、交換後にオブジェクトを見ると、問題なく見えます。
4 . しかし、データをコマンドレットにパイプした後、「OldDomain」
が利用できないというエラーが発生し続けました。「OldDomain」はもはやオブジェクトに含まれていないはずです...
しばらく時間がかかりましたが、「OldDomain」がどこから来ているのかがわかりました。値を置き換えた後、オブジェクトを再度エクスポートすると明らかになります。
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>Deserialized.System.Object</T>
</TN>
<ToString>OldDomain\UserName</ToString> <<<<<<<<<<<<
<Props>
<S N="AdministratorName">NewDomain\UserName</S> <<<<<<<<<<<<
<Obj N="AdministratorType" RefId="1">
<TN RefId="1">
<T>Deserialized.System.Enum</T>
<T>Deserialized.System.ValueType</T>
<T>Deserialized.System.Object</T>
</TN>
<ToString>Full</ToString>
<I32>1</I32>
</Obj>
</Props>
</Obj>
</Objs>
値は tostring()-Method にあります。しかし、なぜtostring()- Methodに静的な値があるのでしょうか? METHOD であるはずです。
何らかの理由で、コマンドレットは tostring() メソッド内でこの値を使用します。5.この理由とは別に、tostring() 内の値を置き換えてみました。しかし、それはメソッドなので、これをオーバーライドする唯一の方法は、同じ名前の新しいメソッドを追加することです:
$subobj | Add-Member -MemberType scriptmethod -Name tostring {$replVal} -Force
これは、 tostring () の値を変数 $replValの内容(
" NewDomain") ではなく、変数$replVal自体で置き換えたため、半分しか機能しませんでした。したがって、$subobj.tostring() は、固定値ではなく、メソッド tostring() を呼び出すときに $replval にあるものです。
だから私が必要とするのは、scriptmethod が noteproperty のように機能し、tostring () = $replvalueのように固定値を割り当てられるようにすることです。
A)なぜ tostring() が export-clixml - ファイルにあるのですか?
B)格納されたオブジェクト内にメソッド (tostring())の固定値があるのはなぜですか?
C)そして最も重要: tostring() 内の固定値を置き換えるにはどうすればよいですか?
よろしくお願いします、ffm