用powershell实现自动化操作

您所在的位置:网站首页 自动刷新脚本命令 用powershell实现自动化操作

用powershell实现自动化操作

2023-08-04 03:03| 来源: 网络整理| 查看: 265

每天登录OA太繁琐,公司OA又只允许用IE,本身写chrome扩展水平也不高,更搞不懂selenium

既然是windows下工作,当然还得微软的东东。研究了几天,才发现用powershell就很方便。

闲话少说:首先在运行中输入powershell,打开Windows PowerShell ISE

默认情况下不能直接运行,先在ISE的命令行输入

set-executionpolicy remotesigned

 现在可以编写、保存和运行powershell脚本了。

#IE运行时的等待函数 function Wait($ie){ sleep 2 do{ sleep -Mi 200 }while($ie.Busy) } #打开新IE窗口的函数 function NavigateIE($url) { $ie = new-object -com "InternetExplorer.Application"; $ie.navigate($url); $ie.Visible=$true; [System.Threading.Thread]::Sleep(2000); return $ie; } #脚本开始 $ie = NavigateIE('www.baidu.com') #获取百度搜索框 $inputs=$ie.Document.getElementsByName('wd') foreach($element in $inputs){ $element.value="我要搜索powershell" }

  实际应用中遇到的困难有:

有时仅用Wait函数还不够,再加上等待的语句

[System.Threading.Thread]::Sleep(1000);

  有的网页元素没有ID,就用getElementsByTagName,如

$ie2 = NavigateIE("http://www.baidu.com"); [System.Threading.Thread]::Sleep(1000); $doc2 = $ie2.document $inputs = $doc2.getElementsByTagName("input") foreach($el in $inputs) { $namestr = $el.type Write-Host $namestr if($namestr.Equals("button")) { $el.click() } }

  网页中有iframe,要用到contentDocument,这个问题困扰我好几天

#模拟点击iframe中审批类流程的more $frame1 = $ie.Document.getElementById('Frame123').contentDocument; $frame1.getElementById('more_888').click()

 还有的网页有frameset,又困扰了半天,可用以下代码先找到其中的frame

$frame = $ie.Document.frames.document.body.childNodes.item(3).childNodes.item(3)

  比如有个网页中frameset下有frame,下面又有iframe,用以下语句才取得最后一个有ID的元素

$ie.Document.frames.document.body.childNodes.item(3).childNodes.item(3).contentDocument.getElementById('iFrameList').contentDocument.getElementById('tabTask')

 获取相应alt属性的img元素

$imgs = $ie.Document.frames.document.body.childNodes.item(3).childNodes.item(3).contentDocument.getElementById('iFrameList').contentDocument.body.getElementsByTagName("img") $imgs |Where-Object{$_.alt -eq "查看流程"}| ForEach-Object{$_.alt}

   除了直接在命令行输入变量名外,可用以下语句查看变量$i的方法和属性

$i |Get-Member

 或输出到文件中更方便看

#省略d:\的话,会在当前脚本目录下生成1.txt $i |Get-Member |out-file d:\1.txt

  在网址包含某个值之前,让脚本循环等待

function WaitUrl($ie,$url){ sleep 2 do{ sleep -Mi 200 }while( $ie.LocationURL -notlike '*'+$url+'*') }

  启动应用程序

Start-Process "D:\Program Files (x86)\aaa\bbb.exe"

如我电脑上的广讯通不是开机自启动,就放在脚本中启动

function gxt(){ $gxt = Get-Process | ?{$_.ProcessName -eq "GXT"} if($gxt -eq $null){ Start-Process "C:\Program Files (x86)\Glodon\GXT\bin\GXT.exe" } }

 还有就是登录某些网页时的windows认证的问题,总时弹出windows安全提示框,要求输入用户名和密码

我希望最好是能模拟输入和点击确定,但实现不了。最后只能加个循环等待手工输入后继续后面的工作,冏囧

参考了http://www.cnblogs.com/Joe-T/archive/2011/12/29/2283408.html,仍未解决

原创部分结束 

===========================================================

 以下是从网上搜来的内容:

 

Powershell 定义文本

使用双引号,可以让自己的定义的字符中的变量被内容替换;

$site="飞苔博客 Powershell博客" $text="$site $(get-date) $env:windir" $text

 

输出:飞苔博客 Powershell博客 08/25/2012 18:49:41 C:windows

 

2.  使用单引号,可以让自己的定义的字符串原样输出;

$text='$fei $(tai) $env:windir 飞苔博客 (20+2012)' $text

 

输出:$fei $(tai) $env:windir 飞苔博客 (20+2012)

 

3. 文本中的两种特殊字符, 一个是变量的前缀“$”,一个是反引号“·”位于数字键1左边。

PS C:\> "computer name:$env:computername"computer name: computer1

PS C:\> "current date:$(get-date)"current date:05/07/2015 09:47:11

 

4. Powershell转义字符

在其它编程语言中喜欢将反斜杠作为转义字符,但是在Powershell中扮演转义字符角色的不是反斜杠,而是反引号“`”字符串中的反引号,会对紧跟随其后的字符进行特殊处理。

 

#使用单引号闭合字符串输出双引号 'The site of my blog is"www.mossfly.com"' #使用转义字符输出双引号 “My blog site is`"www.mossfly.com`"" #在字符串中输出换行符 “The site of my blog is `"www.mossfly.com`",`n飞苔博客"

 

输出:

The site of my blog is”www.mossfly.com”My blog site is”www.mossfly.com”The site of my blog is “www.mossfly.com”,飞苔博客

 

5. Powershell转义字符表

转义字符 描述 `n 换行符 `r 回车符 `t 制表符 `a 响铃符 `b 退格符 `’ 单引号 `” 双引号 `0 Null “ 反引号本身

 

6. PowerShell中strings 定义多行文本

@“字符串”@格式定义多行文本,尤其是较长的文本,再好不过了,这里要注意开始和结束的标记必须另起一行。

@" 这首诗用来评价陶渊明的诗歌再好不过了   一语天然万古新,豪华落尽见真淳。 南窗白日羲皇上,未害渊明是晋人。 "@

 

7. PowerShell中用户的交互

如果要提示用户输入可以使用read-host

PS E:> $name=Read-Host "请输入您的用户名"请输入您的用户名: Mosser LeePS E:> "您输入的用户名为:$name"您输入的用户名为:Mosser Lee

 

如何解析read-host中的变量?以通过ExpandString方法解析

PS E:> $inputPath=Read-Host "请输入文件路径"请输入文件路径: $env:windirPS E:> $inputPath$env:windirPS E:> $ExecutionContext.InvokeCommand.ExpandString($inputPath)C:windows

 

如何将加密的密码转换为普通文本?

PS E:> $pwd=Read-Host -AsSecureString "请输入密码"请输入密码: ******PS E:> $pwdSystem.Security.SecureStringPS E:> [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd))abc123

 

询问用户名和密码

如果你想授权一个用户需要提供用户凭据,可以使用Get-Credential命令,该命令会弹出一个安全对话框,一旦用户输入完毕,就会返回一个Credential对象包含用户名和密码

PS E:> $cre=Get-Credential MossserLeePS E:> $creUserName                        Password--------                        --------MossserLee System.Security.SecureString

 

 如何轻松的获得用户凭据,不需要用户交互的输入?

Function Get-DomainCredential(){ $domain=Get-DomainName $username = "$domain\administrator" $password = "123456" $cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) return $cred}

 

本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1643717



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3