none
start-bitstransfer problem RRS feed

  • Frage

  • Hallo,

    ich habe eine .ps1 Datei in der ich start-bitstransfer nutze um 4 Dateien von einer Website in einen bestimmten Ordner zu laden. Die .ps1 Datei wird von einer start.cmd aufgerufen. Das funktioniert auch alles super.. Jetzt habe ich allerdings den Auftrag bekommen die start.cmd von einer scheduledImport.cmd mit einem anderen user auszuführen..

    ____________

    runas /user:ZB\XXXXXX D:\XXX\scripts\XXX\start.cmd

    ____________

    Dabei bekomme ich folgenden Fehler:

    ____________

    Start-BitsTransfer : The operation being requested was not performed because th
    e user has not logged on to the network. The specified service does not exist.
    (Exception from HRESULT: 0x800704DD)
    At D:\XXX\scripts\XXX\shell.ps1:10 char:30
    +     $Job = Start-BitsTransfer <<<<  -Source $source -Destination $destination
     -Asynchronous
        + CategoryInfo          : NotSpecified: (:) [Start-BitsTransfer], COMExcep
       tion
        + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Micr
       osoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand

    ____________

    Hat jemand eine Idee wie ich diesen Fehler beheben kann?


    lg Zuyas

    Montag, 27. Mai 2013 10:48

Antworten

  • Wget Get-Webfile für PowerShell

    http://poshcode.org/3920

    Für die PowerShell 3.0 gibt es schon ein eigenes Cmdlet dafür (Invoke-WebRequest), aber du brauchst ja PowerShell 2.0 !


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Zuyas Dienstag, 28. Mai 2013 13:01
    Dienstag, 28. Mai 2013 12:35
  • Alternativ kannst du auch den Webclient von .net nutzen:

    (New-Object System.Net.WebClient).DownloadFile($url,$dst)

    Gruß malte
    • Als Antwort markiert Zuyas Dienstag, 28. Mai 2013 13:01
    Dienstag, 28. Mai 2013 12:52

Alle Antworten

  • Hallo Zuyas,

    nutze doch die Credentials in der Powershell...

    $Cred = Get-Credential
    Start-BitsTransfer -Credential $Cred ... 

    Gruß Malte

    NACHTRAG:

    Wenn es Script nicht interaktiv läuft kann man auch die Credentials hinterlegen:

    Siehe http://blogs.msdn.com/b/koteshb/archive/2010/02/13/powershell-creating-a-pscredential-object.aspx

    Montag, 27. Mai 2013 11:37
  • Ich nehme mal an das du das mit Hilfe des Windows Scheduler ausführen lässt ?

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Montag, 27. Mai 2013 11:39
  • Danke für eure Antworten.

    Mein Auftrag lautet:

    ____________

    We have created a service user called: XXXXXX (password YYYY).

    1. Please create another batch file (scheduledImport.cmd) that simply starts the existing download + import with this user context.

    e.g runas /user:ZB\XXXXXX ...

    2. Please add a server task calling this batch file every morning at 5:00 CET & test the complete import.

    ____________

    Leider habe ich so etwas noch nie gemacht und deshalb auch keine Ahnung wie ich es anstellen soll.

    Das ganze sollte natürlich nicht-interaktiv laufen. Ich habe es eben trotzdem mal mit $Cred = Get-Credential getestet und dann den Nutzer XXXXXX und Passwort YYYY eingeben, leider gab es den selben Fehler wie vorher.

    Der Server läuft unter Windows Server 2008 R2 und hat Powershell 2.0

    Eine Idee woran das liegen könnte?

    lg Zuyas

    Montag, 27. Mai 2013 13:35
  • Hallo Zuyas,

    hinterlege den User doch im Task oder im (PS) Script. Allerdings sollte man Kennwörter meiner Meinung nach nie im cleartext ablegen.

    Soweit mir bekannt ist, läuft runas immer interaktiv also will das Kennwort eingeben haben.

    Gruß Malte

    Montag, 27. Mai 2013 13:56
  • So weit ich weiss wirst du das mit diesen Anforderungen nicht hinbekommen!

    Bits läuft nur, wenn der User, mit dem Bits ausgeführt wird angemeldet ist.
    siehe hier: http://www.blakes.net/alsblog/Lists/Posts/Post.aspx?ID=11

    UND hier: http://msdn.microsoft.com/en-us/library/windows/desktop/ee663885%28v=vs.85%29.aspx

    Deshalb MUSS der User, mit dem der Sheduled Task läuft, einer der folgenden sein:
    LOCAL SERVICE
    NETWORK SERVICE
    SYSTEM

    Alle Prozesse die der Task Scheduler startet laufen innerhalb des Scheduler Dienstes (als Dienst mit eingeschränkten rechten), innerhalb dieses Dienstes kann man die Identität nicht wechseln!
    Dies gilt auch für alle Prozesse die dieser Prozess startet!

    Deshalb scheidet der Windows Task Scheduler als möglichkeit aus !

    Das Cmdlet Start-BitsTransfer hat einen Credentials Parameter diesen kannst du nutzen.

    PowerShell Login Informationen verschlüsselt Speichern
    http://www.gamorz.de/blog/2012/12/11/powershell-login-informationen-verschlusselt-speichern/


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!



    Montag, 27. Mai 2013 14:54
  • Hi Peter,

    ich konnte nichts zu dem Thema finden... hast dazu noch genauere Informationen!? :-)

    Ich hätte jetzt mal ins blaue getippt, dass der User nach dem starten des Bits Jobs sich wieder abmeldet. Was sich so weis wird der Job dann Pausiert...

    Alternativ mal den Service SENS checken (http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/1464860b-db04-4e2e-8788-b789c6649e5b und http://technet.microsoft.com/en-us/library/cc720473(WS.10).aspx )

     

    Gruß Malte

    Montag, 27. Mai 2013 16:36
  • Mehr Informationen habe ich auch nicht!

    http://msdn.microsoft.com/en-us/library/windows/desktop/ee663885%28v=vs.85%29.aspx

    When you use *-BitsTransfer cmdlets from within a process that runs in a noninteractive context, such as a Windows service, you may not be able to add files to BITS jobs, which can result in a suspended state. For the job to proceed, the identity that was used to create a transfer job must be logged on. For example, when creating a BITS job in a PowerShell script that was executed as a Task Scheduler job, the BITS transfer will never complete unless the Task Scheduler's task setting "Run only when user is logged on" is enabled.


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Dienstag, 28. Mai 2013 05:43
  • Danke für eure Antworten. Gibt es alternativen zu BitsTransfer die solche Probleme nicht haben? Es sollen ja nur Dateien von einer Seite runtergeladen werden.
    Dienstag, 28. Mai 2013 12:11
  • Wget Get-Webfile für PowerShell

    http://poshcode.org/3920

    Für die PowerShell 3.0 gibt es schon ein eigenes Cmdlet dafür (Invoke-WebRequest), aber du brauchst ja PowerShell 2.0 !


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Zuyas Dienstag, 28. Mai 2013 13:01
    Dienstag, 28. Mai 2013 12:35
  • Alternativ kannst du auch den Webclient von .net nutzen:

    (New-Object System.Net.WebClient).DownloadFile($url,$dst)

    Gruß malte
    • Als Antwort markiert Zuyas Dienstag, 28. Mai 2013 13:01
    Dienstag, 28. Mai 2013 12:52
  • So ist es doch gleich viel besser :)

    Habe es jetzt umgeschrieben und funktioniert soweit alles wie es soll.

    Vielen Dank!

    lg Zuyas

    Dienstag, 28. Mai 2013 13:03