Powershell script “fisicamente” escrevendo texto

1

É possível fazer com que o powershell escreva algo em uma janela, ou seja, onde o mouse chega, ele grava nessa janela, se está no navegador da Web, um aplicativo, etc.?

Estou pensando em criar um roteiro que leia o que está escrito na solicitação e, em seguida, siga em frente.

Seria algo parecido com isto:

$test = "write this text"

Add-Type -TypeDefinition $cSource -ReferenceAssemblies System.Windows.Forms,System.Drawing

  Start-Sleep -Seconds 1

[Clicker]::LeftClickAtPoint(900,900)

  Start-Sleep -Seconds 1
Write-Content "$test"

Não consigo descobrir se existe um cmdlet para isso.

    
por B.Frederik 30.06.2018 / 16:05

1 resposta

2

O que você está pedindo aqui é a automação da GUI. Este não é o caso de uso de destino para o PS. Portanto, não há cmdlet interno para isso e nenhum cmdlet ou função chamado Write-Content. O closet que você pode obter sozinho é usar a antiga opção SendKeys.

# Send output to Notepad and view it wihtout creating a file first.
# Start notepad
Notepad 

# Get a list of servics and put on the clipboard
Get-Service | Clip

# Put the clipboard content in the notepad instance
## .NET:
[void][reflection.assembly]::loadwithpartialname("system.windows.forms")
[system.windows.forms.sendkeys]::sendwait('^v')

No entanto, isso não é realmente confiável, porque diferentes CPUs, placas gráficas e realmente mexem com a tentativa de usá-lo de forma consistente em todas as plataformas. Estive lá, fiz isso e ainda o faço para locais pequenos onde eu sei como vai fluir.

Existem módulos que você pode baixar e usar para ajudar na automação da GUI ...

https://archive.codeplex.com/?p=wasp

https://archive.codeplex.com/?p=uiautomation

… e são ferramentas do 3rdP como o AutoIT.

Tudo o que foi dito, você ainda terá a questão de trabalhar para descobrir qual janela você está tentando atingir, posições de elemento da interface do usuário, etc. Esse tipo de coisa requer C # e outras chamadas de API para garantir que você possa obter para essas coisas.

Existem inúmeras discussões sobre esse tipo de esforço em toda a web, e a dor / fracasso / sucessos experimentados ao longo do caminho. Basta fazer uma pesquisa por "PowerShell SendKeys" ou "Automação do GUI do PowerShell" e você verá isso imediatamente.

Por último, todo esse material da GUI, onde você está tentando lidar com eventos de cliques do mouse, eventos de mouseover, eventos de mousehover, etc., é realmente possível apenas para um aplicativo que você escreveu pessoalmente, na maioria dos casos, a menos que / forneceu informações sobre a API para fazer isso.

Aqui está uma discussão do SO que destaca o que estou dizendo aqui e deve ser do seu interesse.

How i can send mouse click in powershell

https://stackoverflow.com/questions/39353073/how-i-can-send-mouse-click-in-powershell

Atualização por comentário / solicitação

Não se preocupe.

O Codeplex existe há um bom tempo, mas não está mais recebendo nenhuma atividade. Daí o material do arquivo. Todas as coisas no Codeplex foram copiadas / hospedadas para o GitHub e locais semelhantes.

Qual módulo você está após carregar?

O ideal é que você queira isso na localização do seu módulo de perfil de usuário ...

C:\Users\YourUserName\Documents\WindowsPowerShell\Modules

.. mas você pode colocá-lo em ambos.

Às vezes, eu tenho módulo não autoload conforme o esperado, Então, eu apenas manualmente carregá-los através da configuração do perfil ou no script que irá usar o módulo.

Import-Module -Name ModuleName

Ou

Import-Module -Name C:\Users\YourUserName\Documents\WindowsPowerShell\Modules\ModuleName
    
por 30.06.2018 / 21:17

Tags