Thursday 5 October 2017

O Powershell Da Waitforexit Não Funciona


Estou tentando executar um programa do PowerShell, aguardo a saída, depois tenha acesso ao ExitCode, mas não tenho muita sorte. Eu não quero usar - Aguarde com o Processo de Início, pois preciso de algum processamento para continuar em segundo plano. Heres um script de teste simplificado: executar este script fará com que o bloco de notas seja iniciado. Depois que isso for fechado manualmente, o código de saída será impresso, e ele será iniciado novamente, sem usar - aguarde. No ExitCode é fornecido quando isso é encerrado: preciso executar um processamento adicional entre o início do programa e aguardando o encerramento, então eu não posso usar - Wait. Qualquer idéia de como posso fazer isso e ainda ter acesso à propriedade. ExitCode deste processo, pediu 21 de abril 12 às 19:23 Há duas coisas para lembrar aqui. Um é adicionar o argumento - PassThru e dois é adicionar o argumento - Wait. Você precisa adicionar o argumento de espera por causa desse defeito connect. microsoftPowerShellfeedbackdetails520554start-process-do-not-return-exitcode-property Depois de fazer isso, um objeto de processo é passado de volta e você pode observar a propriedade ExitCode desse objeto. Aqui é um exemplo: se você executá-lo sem - PassThru ou - Wait, ele não imprimirá nada. CarlR Esta é uma peculiaridade da implementação do objeto Processo. A implementação da propriedade ExitCode primeiro verifica se o processo foi encerrado. Por algum motivo, o código que executa essa verificação não apenas olha a propriedade HasExited, mas também verifica se o identificador do processo está presente no objeto process e lança uma exceção se não for. O PowerShell intercepta essa exceção e retorna nulo. Ndash Jakub Berezanski onPowerShell está rapidamente se tornando a linguagem de script preferencial e a CLI de Usuários avançados, bem como profissionais de TI. It8217 vale a pena aprender alguns comandos para você começar, então nós obtivemos 5 cmdlets úteis para você aprender hoje. Get-Command O Get-Command é um dos cmdlets mais úteis em todo o PowerShell, pois ajudará você a lidar com o PowerShell, permitindo que você pesquise determinados cmdlets. O uso do Get-Command por conta própria é, sem dúvida, não muito útil, pois apenas vai cuspir todos os comandos que o PowerShell possui. Mas, a partir disso, podemos ver que os objetos que as saídas do PowerShell possuem uma propriedade Nome e Módulo. Usando essa informação, podemos refinar a nossa pesquisa procurando por cmdlets que contenham certos termos. Por exemplo, se eu quisesse encontrar todos os cmdlets que contenham a palavra IP, eu poderia fazer isso: Get-Command Name IP Como você pode ver, nós ainda conseguimos alguns resultados, nossa próxima opção é procurar dentro de um módulo específico. No nosso caso, vou escolher o módulo NetTCPIP. Módulo Get-Command NetTCPIP Nome IP Depois de encontrar o cmdlet que você está procurando usando Get-Command, você vai querer saber a sintaxe e como você pode usar esse cmdlet específico. É aí que o Get-Help entra, se você já usou a linha de comando no Windows, provavelmente fez algo como isto: Bem, isso não funciona no PowerShell, porque no PowerShell é usado um espaço para separar um comando de seus parâmetros. Então, em vez disso, usamos o Get-Help e passamos um nome de cmdlets para Get-Help como um parâmetro. Get-Member Get-Member nos permite obter informações sobre os objetos que os cmdlets retornam. A captura com o get-member, é que ele depende do recurso de pipeline PowerShells, para demonstrar isso, poderemos usar o cmdlet Get-Process. Como você pode ver a saída do PowerShells mostra algumas das propriedades, que você pode ver no topo de cada coluna. O primeiro problema é que, enquanto essas são as propriedades que você está procurando a maior parte do tempo, ainda há mais deles. O segundo problema é que ele não mostra nenhum método que possamos chamar o objeto. Para ver os métodos e propriedades, podemos canalizar nossa saída para o Get-Member, assim: Embora possa significar nada para você no momento, você precisará, mais cedo ou mais tarde, usar o Get-Member, e quanto mais cedo você aprender a usá-lo, Melhor. Como exemplo, usando as informações da saída, poderíamos fazer algo como: Start-Process notepad. exe NotepadProc Get-Process - Name notepad NotepadProc. WaitForExit () Start-Process calc. exe Esse script irá iniciar o bloco de notas e, em seguida, atribui a saída Do bloco de notas do Nome de Processo Get-Processo para a variável NotepadProc, então chamamos o método WaitForExit no NotepadProc que faz com que o script pause até você fechar o bloco de anotações, depois de ter fechado o bloco de notas, a calculadora será iniciada. (Current Pipeline Object) Embora não seja exatamente um cmdlet, é uma das variáveis ​​especiais mais utilizadas no PowerShell. O nome oficial é o atual objeto de pipeline. Ele é usado em blocos de script, filtros, a cláusula de processo de funções, onde-objeto, foreach-objeto e switches. No entanto, é mais fácil de explicar com um exemplo, o que nos leva ao nosso próximo cmdlet, Where-Object. Where-Object Where-Object faz exatamente o que parece, ele seleciona um objeto com base em se atende a determinados critérios. Isto irá reunir, e as propriedades que podemos ver usando Get-Member. Para demonstrar isso, vamos canalizar a saída do Get-Process para o cmdlet Where-Object. Então, o que está acontecendo aqui, você pergunta: Bem, a primeira coisa que estamos fazendo é obter uma lista de processos em nosso computador e passar a saída (usando o personagem) para nosso cmdlet Where-Object, que leva um bloco de script como um parâmetro. O bloco de script (definido pelas chaves) instrui os cmdlets Where-Object para apenas selecionar objetos onde seu parâmetro de nome é igual a xxplore e, portanto, só obtemos uma lista das instâncias do IE que estão sendo executadas. Isso é tudo aí, divirta-se

No comments:

Post a Comment