字符串中有空格,但我不能在 powershell 中拆分它
There are spaces in string, but I can't split it in powershell
我想比较用户的组和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.ps1
Enter the folder path: \domain.org\xxx\xx\xxx
Enter the sAMAccountName of user: zzz
PS C:\Users\zzz\Desktop>
谁能告诉我如何解决这个问题?
仅考虑您已有的字符串:
下面应该给你你要找的东西:
$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\','')
为什么不简单地遍历由 Get-Acl
编辑的值 return 并替换每个项目的域部分?
类似
((Get-Acl $folder).Access |
Select-Object IdentityReference -Unique).IdentityReference |
ForEach-Object { $_ -replace '^domain-ORG\' }
P.S。
您的代码 $getSGs = (get-acl $folder).Access | Select-Object -uniq -ExpandProperty IdentityReference
不是 return 一个 字符串 ,而是一个 对象 数组 Value
属性其中保存了账户名。
因为您稍后在其上使用 -split('.*\')
,结果变成了一个字符串数组,但如果您只是将其省略,代码会简单得多。
我想比较用户的组和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.ps1
Enter the folder path: \domain.org\xxx\xx\xxx
Enter the sAMAccountName of user: zzz
PS C:\Users\zzz\Desktop>
谁能告诉我如何解决这个问题?
仅考虑您已有的字符串:
下面应该给你你要找的东西:
$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\','')
为什么不简单地遍历由 Get-Acl
编辑的值 return 并替换每个项目的域部分?
类似
((Get-Acl $folder).Access |
Select-Object IdentityReference -Unique).IdentityReference |
ForEach-Object { $_ -replace '^domain-ORG\' }
P.S。
您的代码 $getSGs = (get-acl $folder).Access | Select-Object -uniq -ExpandProperty IdentityReference
不是 return 一个 字符串 ,而是一个 对象 数组 Value
属性其中保存了账户名。
因为您稍后在其上使用 -split('.*\')
,结果变成了一个字符串数组,但如果您只是将其省略,代码会简单得多。