2016-07-06 2 views
0

MDT 내 응용 프로그램은 우리의 주요에 정기적으로 복사되도록 내가 PowerShell에서 동기화 스크립트를 만들려고 해요 사용하기 파일 서버, 폴더 이름을 기반으로합니다 (MDT에서는 응용 프로그램이 하나의 폴더에 있으며 주 서버에는 응용 프로그램이있는 부서에 따라 응용 프로그램이 분할되어 있습니다).어떻게 특정 문자열에 대한 파워 쉘 배열을 검색하고 복사 항목에서이 결과 -include 스크립트

내가 웹에서 읽은 내용에서

, 가장 좋은 방법은 내가 좀 어떻게 생각 '은 Get-ChildItem을 "과 배열을 채우는 것 (아래 코드 참조). 배열이 비록 채워 후

, 나는 특정 결과를 해당 배열을 검색하는 방법을 알고,도 내가 복사 항목을 가지고 그 결과를 사용하는 방법을 알고하지 않습니다.

요약하면 "Get-ChildItem"을 사용하여 배열을 만들고 결과 배열에서 특정 폴더를 쿼리 한 다음 해당 폴더를 특정 대상에 복사하도록합니다.

$arr = Get-ChildItem \\slmtl-wds02.domain.inc\deploymentshare$\applications | 
    Where-Object {$_.PSIsContainer} | 
    Foreach-Object {$_.Name} 
$sourcepath = \\slmtl-wds02.domain.inc\deploymentshare$\applications 
$destSLARC = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLARCMTL 
$destSLMTL = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLMTL 
$destSLGLB = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLGLB 
$destSLTECH = \\slmtl-fs01.domain.inc\folder\it_services\private\software\service_desk\pc\SLTECH 

사전에 감사 당신의 도움 :)이 작품은 경로 D를 변경

답변

0
$sourceLocation = "c:\analysis\" 
$targetLocation = "c:\analysisCopy\" 
$included = @("folder1", "folder2") 

$result = @() 
foreach ($i in $included){ 
    $result += get-ChildItem $sourceLocation -filter $i | Where-Object {$_.PSIsContainer} 
} 
$result | foreach-Object { copy-item $_.FullName -Destination $targetLocation -Recurse} 
+0

예! 이것은 완벽하게 작동합니다. 내 기억이 나에게 도움이된다면, 내가 그곳에있는 것을 덮어 쓰고 싶다면, 그냥 - 레스큐 후에 - 포스를 추가해야한다, 맞습니까? –

+0

예, -force를 추가하면 예외를 throw하는 대신 대상에 이미 존재하는 파일을 덮어 씁니다. 그러나 소스에 더 이상 존재하지 않는 대상의 기존 파일을 삭제하지 않으므로 원할 경우 먼저 대상을 삭제하려고 할 수 있습니다. – pabrams

+0

Nah, 대개이 스크립트는 MDT 서버에서 업데이트 한 내용을 모든 주 사무소의 모든 기술자가 액세스 할 수있는 주 파일 서버로 복사하는 역할을합니다. 그래서 오래된 물건들을 보관하는 것은 정말로 문제가되지 않습니다. 감사 거대한 엉덩이 스크립트 최대 었죠, 그러나 결국, 모든 벌금을 작동 답 : –

0

희망을 위해 : 여기

내가 지금까지 가지고있는 코드의 원하는 경로에 \ 폴더의 이름을 입력하면

$Keyword=[Microsoft.VisualBasic.Interaction]::InputBox("Enter your Query") 
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null 
Get-ChildItem D:\ -recurse | Where-Object {$_.PSIsContainer -eq $fasle -and $_.Name -match "$keyword"} | Copy-Item -Destination d:\test 
+0

을 찾는 것은 당신이 내가 원하는 것을 이해 생각하지 않습니다. 특정 파일 형식이나 파일 이름을 cherry-pick으로보고 싶지 않습니다. 전체 프로세스는 파일 기반이 아닌 폴더 기반입니다. 나는 모든 하위 폴더 이름이 폴더를 조회하고 특정 이름에 대한 결과를 조회하고 복사 할 수 있도록 복사 항목에 그 결과를 추가해야합니다. 당신의 해결책은 "그 파일 유형/이름을이 폴더를 검색하고, 여기에 복사"말했다. Robocopy를 사용하는 방법을 알고 있지만, 필요한 작업을 수행 할 수 없습니다. (예, 그렇지만 많은 예외가있을 수 있습니다.) –

+0

지금 확인해보십시오. – DisplayName

+0

@jacksh 그는 여러 키워드를 검색하려고합니다. – pabrams