最近迁徙了一些用户从域A转到另外一个域B,为了方便继续访问旧的文件系统,保留了SID历史记录。今天发现个别运行在旧域A的 Citrix Xenapp程序不工作了。
经过检查,发现该程序启动的时候会自动运行 whoami /group自检,如果有无法解析的SID,自动结束。估计是迁徙的时候某些组的SID History出了问题。那么怎么找出这些无法解析的SID和对应的组名呢?豆子写了个很简单的powershell命令来查找
在域A上以用户身份登录,执行下列命令,whoami的结果先转化成csv文本,然后powershell再转化成结构化对象以便操作。
1
<code>whoami /groups /fo csv | </code><code>ConvertFrom-Csv</code> <code>| where{</code><code>$_</code><code>.type </code><code>-match</code> <code>"Unknown SID type"</code><code>} | select sid > K:\unknown.txt</code>
结果如下
<a href="http://s3.51cto.com/wyfs02/M00/59/77/wKioL1TULRqhcdp7AAQuGGbKdDE784.jpg" target="_blank"></a>
然后在域B上读取这个文本,进行Sid到组名的解析即可
2
3
4
5
6
7
8
9
10
11
12
13
<code>$group</code><code>=</code><code>get-content</code> <code>K:\unknown.txt | select -skip 3</code>
<code>foreach</code> <code>( </code><code>$sid</code> <code>in</code> <code>$group</code><code>)</code>
<code>{</code>
<code> </code><code>try{</code>
<code> </code>
<code> </code><code>$objSID</code> <code>= </code><code>New-Object</code> <code>System.Security.Principal.SecurityIdentifier (</code><code>$sid</code><code>.TrimEnd()) </code>
<code> </code><code>$objUser</code> <code>= </code><code>$objSID</code><code>.Translate( </code><code>[System.Security.Principal.NTAccount]</code><code>) </code>
<code> </code><code>write-host</code> <code>$objUser</code><code>.Value</code>
<code> </code><code>}</code>
<code> </code><code>catch{</code>
<code> </code><code>write-host</code> <code>"Catched error: $_.Exception.Message"</code>
<code> </code><code>} </code>
<code>}</code>
结果如下。
<a href="http://s3.51cto.com/wyfs02/M02/59/78/wKioL1TULcOThclVAAP7MTkgE5A828.jpg" target="_blank"></a>
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1612267,如需转载请自行联系原作者