두 개의 별도의 powershell 명령을 결합하는 방법


1

나는 모두 "Bid Documents"라는 하위 폴더가있는 수백 개의 폴더가 있습니다.

그 "입찰 문서"폴더의 모든 인스턴스에 대해 ACL 사용 권한을 변경해야합니다.

이 프로세스를 자동화하는 방법이 있습니까? vbscript는 ACL 사용 권한을 처리하기위한 좋은 선택이 아니라고 들었습니다. 전 PowerShell 스크립트 또는 자동으로 전체 폴더 계층 구조를 검색하고 "제안"이라는 모든 폴더에 지정된 ACL 사용 권한을 추가 비슷한 뭔가 상상이지만, 이것이 실제로 가능한지, 아니면 다른 경우에는 모르겠다. 이 작업을 수행하는 방법.

누구를 생각해?

편집하다: 코멘트 박스는 다음과 같이 필자의 실제 powershell 명령어를 엉망으로 만든다 :

Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}

문제는 때로는 Proposals 폴더가 Marcstone 입찰가에서 항상 세 계층이 아니라 때로는 두 계층 일 때가 있으므로 때때로 다음을 시도해보십시오.

Get-ChildItem "e:\datastore\marcstone bids\*\*\Bid Documents" | where {$_.Attributes -eq 'Directory'}

두 번째 버전에는 두 가지 버전이 있습니다. * 많은 버전이 있지만이 버전에서는 폴더를 찾지 못합니다. 왜?

다시 수정 : 이것은 점점 더 흥미 진진합니다. 성공한 명령에 의해 반환 된 결과를 조사한 결과 비어있는 "입찰 문서"폴더 만 반환한다는 것을 발견했습니다. 모든 파일을 포함하는 '입찰 문서'폴더는 반환되지 않습니다. 왜??

다시 수정 : 다음 명령을 변경하고 모든 "입찰 문서"폴더를 반환했습니다.

Get-ChildItem "e:\datastore\marcstone bids\*\*\*\Bid Documents" | where {$_.Attributes -match 'Directory'}

이제 icacls를 사용하여 권한을 변경하는 방법을 배우십시오.

다시 수정 : 좋아, 내가 icacls에 대한 올바른 구문이 생각 :

icacls *filename* /deny special-restrict1:(f)

그래서, 누군가 제발 내가이 두 명령을 연결하는 데 도움이됩니다.

다음과 같은 변수를 사용하여 실험 해보십시오.

$var = Get-ChildItem "e:\datastore\marcstone bids\1001-3500\1701-1750\1702 Morrow M
emorial Home - Sparta WI\Bid Documents" | where {$_.Attributes -match 'Directory'} | icacls $var /deny special-restrict1
:/F

실험 목적으로 특정 폴더를 선택했습니다. 이 명령은 다음 오류를 반환합니다.

First parameter must be a file name pattern or "/?"

누구를 생각해?


내가 이것을 해결하기 위해 열심히 노력하고 있음을 증명하기위한 노력에서. 예, 나는 동정을 찾고 있습니다 : ~) 변경하고자하는 폴더를 검색하는 방법을 알아 냈습니다. powershell "Get-ChildItem"e : \ datastore \ marcstone bid *** \ proposal "| {$ _ .Attributes -eq 'Directory'} ""이제 acl 권한 변경을 결과에 어떻게 적용합니까? "
— Mojoman317717

텍스트 상자가 Get-ChildItem "e : \ datastore \ marcstone bids *** \ Bid Documents"이어야하는 내 명령을 엉망으로 만들었습니다. 여기서 {$ _. Attributes -eq 'Directory'}
— Mojoman317717

변화 | icacls $var .. 에 ;icacls $var .. 또는 파이프 객체 사용 $_
— STTR

답변:



0

이것이 도움이 될지 모르지만 여기에 간다 :

원하는 폴더의 경로를 변수에 저장하려고 시도 했습니까? ($ 경로 E : \ datastore \ marcstone 입찰가 *** \ 입찰 문서)

올바른 환경을 구축하지 못했지만 생각 만 했어요.


위의 예에서 내가 그 일을하고 있다고 생각했습니다. "$ var"를 사용하면 icacls 명령의 경로로 "$ var"를 사용하려고합니다. 하지만 내 공부는 변수를 통해 한 번에 하나의 경로를 icacls 명령에 보내려면 "out-string -stream"을 사용해야한다고 제안하는 것 같습니다. 솔직히 말해서, 이것은 내 머리 위로가는 길이며, 벽에 물건을 던져서 무엇인가 붙어 있는지 확인합니다.
— Mojoman317717

그것이 내가 $ Path = E : \ datastore \ marcstone bids *** \ Bid Documents와 같이 설정 한 변수의 경로를 사용하는 경우이 Get-ChildItem $ Path | where {$ _. Attributes -match 'Directory'} | icacls $ Special-restrict 1은 $ Path 변수를 사용하는 방법에 대한 유효한 매개 변수가 아니지만 Special-restrict1 경로 / 거부
— Lachie White

"special-restrict1"이 유효한 매개 변수가 아닌 이유는 무엇입니까? 그것은 그룹 객체의 이름입니다 ... 아니면 SID가 필요합니까? SID가 필요한 경우 몇 자릿수가 필요한가요? 한 번 보았을 때 30-40 자 정도 였으므로
— Mojoman317717

/ deny Sid : perm은 명시 적 사용자 액세스 권한을 명시 적으로 거부합니다. 명시된 거부 ACE가 명시된 사용 권한에 대해 추가되고 명시 적 허가에서 동일한 사용 권한이 제거됩니다. 그것은 icacls 함수에 대한 Powershell의 도움말 화면에서 추출한 것입니다. SiD가 필요해 보이는 것처럼 보입니다. id는 변수에 다시 저장합니다.
— Lachie White

헤이트 메이트가 문제를 해결 했나요?
— Lachie White

0

다음 행을 따라 뭔가를 시도해보십시오.

Get-ChildItem "e:\datastore\marcstone bids\*" -include "Bid Documents" -directory -recurse

-recurse 매개 변수는 중첩 된 관계없이 모든 하위 디렉터리를 찾아야합니다. -directory 매개 변수는 검색을 폴더 (디렉토리)로 제한해야합니다. 구문을 조금 잘못 들었을 수도 있지만 올바른 방향으로 가리켜 야합니다.

거기에서 찾은 각 폴더에 대해 acl을 설정할 명령에 결과를 파이프 할 수 있어야합니다.


이것의 어떤 것이 확실하지 않습니다. 나는 여기에 제시된 아이디어를 시험 할 시간이 없었다. 죄송합니다 ... 바쁜 IT 전문가의 삶 : ~)
— Mojoman317717
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.