我想比較用戶的組和 DFS 的組,以確定用戶是否具有 DFS 的訪問權限。但我陷入了分裂字串。
這是我的代碼的一部分:
$folder = Read-Host 'Enter the folder path'
$User = Read-Host 'Enter the sAMAccountName of user'
$getSGs = (get-acl $folder).Access | Select-Object -uniq -ExpandProperty IdentityReference
$getSGsSplit = $getSGs -split('.*\\')
$arr = $getSGsSplit -split ' '
Write-Host $arr
$getSGs 的值:
domain-ORG\xxx-Read domain-ORG\xxx-Modify domain-ORG\xxx-Admin domain-ORG\xxx-Center domain-ORG\xxxx-Admin BUILTIN\Administrators
$getSGsSplit 的值:
xxx-Read xxx-Modify xxx-Admin xxx-Center xxxx-Admin Administrators
我想要的是按空格分割 $getSGsSplit :
xxx-Read
xxx-Modify
xxx-Admin
xxx-Center
xxxx-Admin
BUILTIN\Administrators
但是我已經嘗試了很多模式,但都不起作用。
$getSGsSplit -split ' .-`t`n`r'
$getSGsSplit -replace ' ','\n'
$getSGsSplit.split(' ').trim()
$getSGsSplit.split('\s').trim()
$getSGsSplit -split ' '
而且無論我使用哪種模式,控制臺write-host $arr[2]仍然是空格。和控制臺write-host $arr[2].getType()總是 System.String
PS C:\Users\zzz\Desktop> C:\Users\zzz\Desktop\12.ps1
Enter the folder path: \\domain.org\xxx\xx\xxx
Enter the sAMAccountName of user: zzz
PS C:\Users\zzz\Desktop>
誰能建議如何解決這個問題?
uj5u.com熱心網友回復:
為什么不簡單地遍歷回傳的值Get-Acl并替換每個專案上的域部分?
就像是
((Get-Acl $folder).Access |
Select-Object IdentityReference -Unique).IdentityReference |
ForEach-Object { $_ -replace '^domain-ORG\\' }
PS 你的代碼$getSGs = (get-acl $folder).Access | Select-Object -uniq -ExpandProperty IdentityReference不回傳一個string,而是一個包含帳戶名稱的屬性的物件陣列Value。
因為你稍后使用-split('.*\\')它,結果變成了一個字串陣列,但如果你簡單地忽略它,代碼會簡單得多。
uj5u.com熱心網友回復:
僅考慮您已經擁有的字串:
下面應該給你你正在尋找的東西:
$a= "domain-ORG\xxx-Read domain-ORG\xxx-Modify domain-ORG\xxx-Admin domain-ORG\xxx-Center domain-ORG\xxxx-Admin BUILTIN\Administrators"
($a -split '\s').replace('domain-ORG\','')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399979.html
下一篇:如何使網站上的留言框作業?
