2017-11-28 21 views
0

GET-ACL을 사용하여 파일의 소유자를 가져오고 도메인 경로가 아닌 사용자 이름으로 변수를 만드는 빠른 방법이 필요합니다. 단순히 도메인을 대체하려는 시도가 효과가 없었습니다.도메인 경로가없는 GET-ACL 파일 소유자

Method invocation failed because [Selected.System.Security.AccessControl.FileSecurity] does not contain a method named 'Replace'. 
At line:1 char:1 
+ $user = $user.Replace('ANT\', '') 

나는이 작동하기 때문에 문자열이 올바른 교체 할 것을 알고 :

$user = GET-ACL | Select Owner 
$user.Split('\')[1] 
:

$user = 'ANT\username' 
$user = $user.Replace('ANT\', '') 

가 나는 또한 성공하지 분할을 사용하여 시도

$user = GET-ACL $lastImage.FullName | Select Owner 
$user = $user.Replace('ANT\', '') 

이 오류를 제공합니다

그리고 이것은 작동합니다. 출력이 원치 않는 헤더를 포함 T :

$user = Get-ChildItem $lastImage.FullName | select @{Name='Owner';E= 
{(($_.GetAccessControl().Owner.Split('\'))[1])}} 

사람은 GET-ACL을 사용하여 변수처럼 사용자 이름을 얻을 수있는 쉬운 방법을 알고 있나요? 그렇지 않다면 사용해야하는 더 나은 cmdlet이 있습니까?

$user = GET-ACL $lastImage.FullName | Select Owner 

이것 :이

답변

2

변경

$user = GET-ACL $lastImage.FullName | Select -ExpandProperty Owner 

설명 : 대신 문자열의 PSCustomObject 유형을 대체하기 위해 노력하고있다

에서, .Replace() 방법은있다 문자열 방법,이 이유는 오류가 발생합니다 does not contain a method named 'Replace'.

-ExpandProperty을 추가하면 문자열 값이 표시되고 replace 메서드가 작동합니다.

참조 : $user.Owner.Replace('ANT\', '')MSDN Blogs

+0

'은 Get-ACL이 | Get-Member'는 확장 된 문자열이 원하는 것이 아니기 때문에 사용할 수있는 것을 보는 좋은 방법입니다. – zzxyz

0

변경 $user.Replace('ANT\', '')-ExpandProperty 자세한 설명. 당신이하는 일은 객체의 Owner 속성을 참조하는 것입니다. 그런 다음 필요하지 않으므로 첫 번째 줄에서 | Select Owner을 제거 할 수 있습니다.

그래서 다음과 같이 이러한 라인을 따라

$user = Get-Acl $lastImage.FullName 
$user = $user.Owner.Replace('ANT\', '')