je l'habitude d'avoir une fonction qui a appelé robocopy
pour copier un fichier très volumineux et montrer les progrès:Comment arrêter la capture du message de progression ROBOCOPY lors de la capture de la valeur de retour de la fonction PowerShell?
function Invoke-Robocopy {
ROBOCOPY C:\TEMP\Source\ C:\TEMP\Destination\ Some-Very-Large-File.bak /COPY:DAT
}
et je l'ai appelé dans une autre fonction:
function Invoke-SomeJob {
Invoke-Robocopy;
}
De cette façon, robocopy
va bien écrire la progression à la console.
Le problème:
Je dois retourner des choses hors de la fonction qui appelle robocopy
:
function Invoke-RobocopyAndReturnStuff {
ROBOCOPY C:\TEMP\Source\ C:\TEMP\Destination\ Some-Very-Large-File.bak /COPY:DAT
return "blah-blah-blah";
}
Je dois utiliser ce retour des choses dans mon travail:
function Invoke-SomeJobUsingStuff {
$result = Invoke-RobocopyAndReturnStuff;
Write-Host $result;
}
Maintenant, le problème est que la progression semble être capturée pendant l'opération de copie, ne s'affiche pas sur la console et seulement après que la copie est terminée $result
contient l'ensemble du shebang! (... pardonnez mon folklore).
Est-ce que quelqu'un pourrait m'éclairer sur comment puis-je obtenir le comportement désiré de laisser la sortie robocopy
être affichée et retourner seulement ce que je veux retourner?
'start -Wait -NoNewWindow robocopy 'C: \ TEMP \ Source \ C: \ TEMP \ Destination \ Some-Very-Large-File.bak/COPIE: DAT'' – PetSerAl
Merci @PetSerAl - J'utilisais' Start-Process' mais sans le '-Wait' et le' -NoNewWindow' – fernandoespinosa