Background Job stuck when using New-PSDrive

This topic contains 4 replies, has 3 voices, and was last updated by Profile photo of Tim Curwick Tim Curwick 2 years, 2 months ago.

  • Author
    Posts
  • #18862
    Profile photo of Adeel Asif
    Adeel Asif
    Participant

    Hello,

    I've a little Powershell script, it creates New Background Job, who contains New-PsDrive and Copy-Item.

     Start-Job -ScriptBlock {
    
    $shareadress = "\\172.22.0.100\c$"
    $username = "Springfield\Administrator"
    $pwd = "MyPassword"
    
    $password = ConvertTo-SecureString -AsPlainText -Force -String $pwd
    $credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username,$password
    
    New-PSDrive TEMPO -PSProvider filesystem -Root $shareadress -Credential $credentials -Scope global
    Copy-Item "C:\test.txt" -Destination "TEMPO:\test.txt"
    
    Remove-PSDrive TEMPO
    
    }
    
    Get-Job | Wait-Job
    Get-Job | Receive-Job
    
    Remove-Job -State Completed

    When i execute it, i got this, and it never end... it's stuck in Running State :

     Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
                   
    28     Job28           BackgroundJob   Running       True            localhost                  

    When i execute it without Job it works :

    $shareadress = "\\172.22.0.100\c$"
    $username = "Springfield\Administrator"
    $pwd = "MyPassword"
    
    $password = ConvertTo-SecureString -AsPlainText -Force -String $pwd
    $credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username,$password
    
    New-PSDrive TEMPO -PSProvider filesystem -Root $shareadress -Credential $credentials -Scope global
    Copy-Item "C:\test.txt" -Destination "TEMPO:\test.txt"
    
    Remove-PSDrive TEMPO
    

    Can someone explain me why? I searched a lot on Google, but can't find any explanation..

    Thanks for your help

  • #18906
    Profile photo of Don Jones
    Don Jones
    Keymaster

    It's entirely possible that the job doesn't have sufficient context to map a drive. Would it be possible to do this without a mapped drive? E.g., just provide UNCs in the Copy-Item command?

  • #18908
    Profile photo of Adeel Asif
    Adeel Asif
    Participant

    Thanks for your answer

    Yes it's possible, but how to pass credentials to Copy-Item cmdlet? I know there is a parameter

    -Credential

    but it didn't work, because it's not supported.

    Anyway, i resolve it by using

    Net-use

    instead of

    New-Psdrive

    , and it works.

    Start-Job -ScriptBlock {
    
    $destination = $letter+"\test.txt"
    $letter = ls function:[d-z]: -n | ?{ !(test-path $_) } | random
    $shareadress = "\\172.22.0.100\c$"
    $username = "Springfield\Administrator"
    $password = "MyPassword"
    
    Net use $letter $shareadress /user:$username $pwd | Out-Null
    
    Copy-Item "C:\test.txt" -Destination $destination
    
    Net use $letter /delete | Out-Null
    
    }
    
    Get-Job | Wait-Job
    Get-Job | Receive-Job
    
    Remove-Job -State Completed
  • #18909
    Profile photo of Adeel Asif
    Adeel Asif
    Participant

    Thanks for your answer, i can't use without mapping a drive, because i can't pass Credential parameter to Copy-Item cmdlet, it doesn't support it.

    Anyway, i resolve it by using Net-use instead of New-Psdrive, and it works

    Start-Job -ScriptBlock {
    
    $destination = $letter+"\test.txt"
    
    $letter = ls function:[d-z]: -n | ?{ !(test-path $_) } | random
    
    $shareadress = "\\172.22.0.100\c$"
    
    $username = "Springfield\Administrator"
    
    $password = "MyPassword"
    
    Net use $letter $shareadress /user:$username $pwd | Out-Null
    
    Copy-Item "C:\test.txt" -Destination $destination
    
    Net use $letter /delete | Out-Null
    }
    
    Get-Job | Wait-Job
    
    Get-Job | Receive-Job
    
    Remove-Job -State Completed

    I think there is a bug with Remote Psdrive and powershell jobs.

    I'll also report it on https://connect.microsoft.com/PowerShell/Feedback

  • #18927
    Profile photo of Tim Curwick
    Tim Curwick
    Participant

    Adeel,

    You can pass the credential to the job.

    Tim Curwick
    MadWithPowerShell.com

    $Credential = Get-Credential
    
    Start-Job -ScriptBlock {
     
    $shareadress = "\\172.22.0.100\c$"
    Copy-Item "C:\test.txt" -Destination $shareadress
     
    } -Credential $Credential
     
    Get-Job | Wait-Job
    Get-Job | Receive-Job
    Remove-Job -State Completed

You must be logged in to reply to this topic.