두 개의 별도의 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.