다음을 통해 공유


Windows PowerShell을 사용하여 BITS 전송 작업 만들기

PowerShell cmdlet을 사용하여 동기 및 비동기 BITS(Background Intelligent Transfer Service) 전송 작업을 만들 수 있습니다.

이 항목의 모든 예제에서는 Start-BitsTransfer cmdlet을 사용합니다. cmdlet을 사용하려면 먼저 모듈을 가져와야 합니다. 모듈을 설치하려면 Import-Module BitsTransfer 명령을 실행합니다. 자세한 내용은 PowerShell 프롬프트에서 Get-Help Start-BitsTransfer를 입력합니다.

Important

Windows 서비스와 같은 비활성 컨텍스트에서 실행되는 프로세스 내에서 *-BitsTransfer cmdlet을 사용하는 경우 BITS 작업에 파일을 추가하지 못할 수 있으므로 일시 중단 상태가 될 수 있습니다. 작업을 진행하려면 전송 작업을 만드는 데 사용된 ID를 로그온해야 합니다. 예를 들어 작업 스케줄러 작업으로 실행된 PowerShell 스크립트에서 BITS 작업을 만들 때 작업 스케줄러의 작업 설정 "사용자가 로그온한 경우에만 실행"을 사용하도록 설정하지 않으면 BITS 전송이 완료되지 않습니다.

 

동기 BITS 전송 작업을 만들려면

Start-BitsTransfer -Source https://Server01/serverdir/testfile1.txt `
-Destination C:\clientdir\testfile1.txt

참고 항목

억음 부호 문자(')는 줄 바꿈을 나타내는 용도로 사용합니다.

 

앞의 예제에서 파일의 로컬 및 원격 이름은 각각 원본대상 매개 변수에 지정됩니다. 파일 전송이 완료되거나 오류 상태가 될 경우 명령 프롬프트가 반환됩니다.

기본 전송 유형은 다운로드입니다. HTTP 위치에 파일을 업로드하는 경우 TransferType 매개 변수를 업로드로 설정해야 합니다.

Start-BitsTransfer cmdlet에 매개 변수 위치가 적용되므로 원본 및 대상 매개 변수에 매개 변수 이름을 지정할 필요가 없습니다. 따라서 이 명령은 다음과 같이 간소화할 수 있습니다.

Start-BitsTransfer https://Server01/serverdir/testfile1.txt C:\clientdir\testfile1.txt

여러 파일을 사용하여 동기 BITS 전송 작업을 만들려면

Start-BitsTransfer -Source C:\clientsourcedir\*.txt `
-Destination c:\clientdir\ -TransferType Download

앞의 예제 에서 Start-BitsTransfer 명령은 새 BITS 전송 작업을 만듭니다. 모든 파일이 이 작업에 추가되고 클라이언트로 순차적으로 전송됩니다.

참고 항목

대상 경로에는 와일드카드 문자를 사용할 수 없습니다. 대상 경로는 상대 디렉터리, 루트 경로 또는 암시적 디렉터리(즉, 현재 디렉터리)를 지원합니다. 와일드 카드 문자를 사용하여 대상 파일의 이름을 바꿀 수 없습니다. 또한 HTTP 및 HTTPS URL은 와일드 카드 작동하지 않습니다. Wild카드는 UNC 경로 및 로컬 디렉터리에만 유효합니다.

 

동기 BITS 전송 작업을 만들고 원격 서버에 대한 자격 증명을 지정하려면

Start-BitsTransfer -DisplayName MyJob -Credential Username\Domain `
-Source https://server01/servertestdir/testfile1.txt -Destination c:\clienttestdir\testfile1.txt `
-ProxyUsage Override -ProxyList @(https://proxy1, 123.24.21.23, proxy3)

앞의 예제에서 사용자는 인증이 필요한 서버에서 파일을 다운로드하는 BITS 전송 작업을 만듭니다. 사용자에게 자격 증명을 입력하라는 메시지가 표시되고 자격 증명 매개 변수가 자격 증명 개체 를 Start-BitsTransfer cmdlet에 전달합니다. 사용자는 명시적 프록시를 설정하고 BITS 전송 작업은 ProxyList 매개 변수로 정의된 프록시만 사용합니다. DisplayName 매개 변수는 BITS 전송 작업에 고유한 표시 이름을 제공합니다.

CSV 파일에서 동기 BITS 전송 작업을 만들려면

Import-CSV filelist.txt | Start-BitsTransfer -TransferType Upload

참고 항목

"|"은(는) 파이프 문자입니다.

 

앞의 예제에서 사용자는 클라이언트에서 여러 파일을 업로드하는 BITS 전송 작업을 만듭니다. Import-CSV cmdlet은 원본 및 대상 파일 위치를 가져와서 Start-BitsTransfer 명령으로 파이프합니다. Start-BitsTransfer 명령은 각 파일에 대해 새 BITS 전송 작업을 만들고, 파일을 작업에 추가한 다음, 순차적으로 서버로 전송합니다.

Filelist.txt 파일의 내용은 다음 형식이어야 합니다.

Source, Destination
c:\clienttestdir\testfile1.txt, https://server01/servertestdir/testfile1.txt
c:\clienttestdir\testfile2.txt, https://server01/servertestdir/testfile2.txt
c:\clienttestdir\testfile3.txt, https://server01/servertestdir/testfile3.txt
c:\clienttestdir\testfile4.txt, https://server01/servertestdir/testfile4.txt

비동기 BITS 전송 작업을 만들려면

$Job = Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip `
       -Destination d:\temp\downloads\ -Asynchronous

while (($Job.JobState -eq "Transferring") -or ($Job.JobState -eq "Connecting")) `
       { sleep 5;} # Poll for status, sleep for 5 seconds, or perform an action.

Switch($Job.JobState)
{
    "Transferred" {Complete-BitsTransfer -BitsJob $Job}
    "Error" {$Job | Format-List } # List the errors.
    default {"Other action"} #  Perform corrective action.
}

앞의 예제에서 BITS 전송 작업은 $Job 변수에 할당되었습니다. 파일은 순차적으로 다운로드됩니다. 전송 작업이 완료되면 파일을 즉시 사용할 수 있습니다. $Job.JobState가 "Transferred"를 반환하면 $Job 개체가 Complete-BitsTransfer cmdlet으로 전송됩니다.

$Job.JobState가 "Error"를 반환하면 $Job 개체가 Format-List cmdlet으로 전송되어 오류를 나열합니다.

PowerShell 원격 세션을 관리하려면

Windows 10 버전 1607부터 PowerShell Cmdlet, BITS관리 또는 다른 컴퓨터(물리적 또는 가상)에 연결된 PowerShell 원격 명령줄에서 BITS 인터페이스를 사용하는 다른 애플리케이션을 실행할 수 있습니다. 이 기능은 동일한 물리적 컴퓨터의 가상 머신에 PowerShell Direct 명령줄을 사용할 때 사용할 수 없으며 WinRM cmdlet을 사용할 때는 사용할 수 없습니다.

원격 PowerShell 세션에서 만든 BITS 작업은 해당 세션의 사용자 계정 컨텍스트에서 실행되며 해당 사용자 계정과 연결된 활성 로컬 로그온 세션 또는 원격 PowerShell 세션이 하나 이상 있는 경우에만 진행됩니다. PowerShell의 영구 PSSessions를 사용하여 Windows PowerShell을 사용하여 원격 컴퓨터 등록에 설명된 대로 각 작업이 계속 진행되도록 PowerShell 창을 열어 둘 필요 없이 원격 명령을 실행할 수 관리.

  • New-PSSession 은 영구 원격 PowerShell 세션을 만듭니다. 만든 후에는 PSSession 개체가 명시적으로 삭제될 때까지 원격 머신에 유지됩니다. 활성 세션에서 시작된 모든 BITS 작업은 클라이언트가 세션에서 연결을 끊은 후에도 데이터 전송을 진행합니다.
  • Disconnect-PSSession은 원격 PowerShell 세션에서 클라이언트 머신의 연결을 끊고 원격 컴퓨터에서 세션 상태를 계속 기본. 가장 중요한 것은 원격 세션의 프로세스가 계속 실행되고 BITS 작업이 계속 진행됩니다. 클라이언트 컴퓨터는 Disconnect-PSSession을 호출한 후 다시 부팅 및/또는 해제할 수도 있습니다.
  • 커넥트-PSSession은 클라이언트 컴퓨터를 활성 원격 PowerShell 세션에 다시 연결합니다.
  • PSSession 을 제거하면 원격 PowerShell 세션이 중단됩니다.

아래 예제에서는 PowerShell Remote를 사용하여 원격 세션에 적극적으로 연결되지 않은 경우에도 작업을 계속 진행할 수 있는 방식으로 비동기 BITS 전송 작업을 사용하는 방법을 보여 줍니다.

# Establish a PowerShell Remote session in Server01 with name 'MyRemoteSession'
New-PSSession -ComputerName Server01 -Name MyRemoteSession -Credential Domain01\User01

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# While running in the context of the PowerShell Remote session, start a new BITS transfer
Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip -Destination c:\temp\downloads\ -Asynchronous

# Exit the PowerShell Remote session's context
Exit-PSSession

# Disconnect the 'MyRemoteSession' PowerShell Remote session from the current PowerShell window
# After this command, it is safe to close the current PowerShell window and turn off the local machine
Disconnect-PSSession -Name MyRemoteSession


# The commands below can be executed from a different PowerShell window, even after rebooting the local machine
# Connect the 'MyRemoteSession' PowerShell Remote session to the current PowerShell window
Connect-PSSession -ComputerName Server01 -Name MyRemoteSession

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# Manage BITS transfers on the remote machine via Complete-BitsTransfer, Remove-BitsTransfer, etc.

# Exit the PowerShell Remote session's context
Exit-PSSession

# Destroy the 'MyRemoteSession' PowerShell Remote session when no longer needed
Remove-PSSession -Name MyRemoteSession

Start-BitsTransfer

Complete-BitsTransfer