PowerShell+NetApi 批处理执行程序
2024-09-07 18:03:42
基于CMD 编写批处理程序很反人类,此篇文章介绍利用Power Shell脚本(借鉴明经net版主雪山飞狐的脚本改造而成)处理之前的Bat+scr的过程(https://www.cnblogs.com/NanShengBlogs/p/10957489.html)
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。与com对象无缝对接,可随时条用
1# 条用com对象
COM就像没落的贵族一样,虽然过气,但那个范儿还在。作为遗产,它们还在放光发热。PowerShell没有嫌弃它,而是选择与他们兼容。这也让现在依旧战斗在Native C++的程序员颇为欣慰。PowerShell对COM的访问方式是通过其ProgID来进行。示例如下:
$ie = New-Object -ComObject Excel.Application
$ie.Visible = $true
2# 条用dotnet framework对象
Add-Type
-AssemblyName
mscorlib
$str
=
New-Object
System.Text.StringBuilder
$str
.Append(
"Hello"
)
$str
.ToString()
3# 改造之前的bat+scr 合并为Powershell脚本
# 控制台程序路径
$key = Get-Item HKLM:\Software\Autodesk\Hardcopy
$arr = @()
foreach($value in $key.Property)
{
$arr += Get-Item HKLM:\Software\$value
} $arr = $arr | sort
for($i=0;$i -lt $arr.Count;$i++)
{
$_values = Get-ItemProperty $arr[$i].PSPath
$s = "{0}.{1}" -f ($i+1),$_values.ProductName
[Console]::WriteLine($s)
}
$n = Read-Host "请选择AutoCad版本" $_values = Get-ItemProperty $arr[[int]$n - 1].PSPath $MyConsole = $_values.Location + "\accoreconsole.exe" # 设置进程启动信息
$psi= New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = "cmd.exe" # 设置进程自动重定向输入
$psi.UseShellExecute = $false
$psi.CreateNoWindow=$true
$psi.RedirectStandardInput = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $psi #获取当前ps1文件所在的文件夹 $ScriptPath=Split-Path -Parent $MyInvocation.MyCommand.Definition $dllFileName=$ScriptPath+"\ShopDrawing.dll" $files=[System.IO.Directory]::GetFiles($ScriptPath,"*.dwg") foreach ($item in $files)
{ [System.IO.FileInfo] $fi=New-Object System.IO.FileInfo($item)
if (!$fi.IsReadOnly){
$process.Start()
$process.StandardInput.WriteLine("""$MyConsole"" "+"/i"+" ""$item""")
$process.StandardInput.WriteLine("SECURELOAD")
$process.StandardInput.WriteLine("")
$process.StandardInput.WriteLine("netload")
$process.StandardInput.WriteLine("""$dllFileName""")
$process.StandardInput.WriteLine("FILEDIA")
$process.StandardInput.WriteLine("")
$process.StandardInput.WriteLine("mySSsetTest")
$process.StandardInput.WriteLine("Qsave")
$process.StandardInput.WriteLine("QUIT")
$process.StandardInput.WriteLine("EXIT")
#$process.Kill()
#$process.Close()
Write-Host ""“$item""批处理执行完成!"
}
else
{
Write-Host ""“$item""被占用或者处于只读状态,批处理执行失败!"
continue
} }
PowerShell脚本下载地址:见第一条评论
最新文章
- js事件流
- Java的日期工具类
- javascript中this指针
- Android应用开发-网络编程(二)(重制版)
- MMDrawerController 的使用
- 自我总结(六)---(学习j2ee+j2ee第一阶段项目)
- nodejs tools
- mac 用 brew
- MAC 环境下初始化mysql root 密码
- 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记
- 专注手机端前端界面开发的ui组件和js组合
- [USACO13OPEN]照片Photo
- spring cloud 入门系列二:使用Eureka 进行服务治理
- 使用curl上传图片的方法
- 在Docker中监控Java应用程序的5个方法
- OpenGL——二次曲面函数(球面-圆锥面-圆柱面)
- (13flask继续研究)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
- spring batch遇到的一些问题
- setInterval() 方法应用
- 20155308《网络对抗》Exp8 Web基础
热门文章
- [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)
- http 连接失败重连机制
- openwrt下载编译
- [Node.js] Read a File in Node.js with fs.readFile and fs.readFileSync
- 支付宝移动支付之IOSApp调用支付宝钱包
- 【安卓笔记】抽屉式布局----DrawerLayout
- Linux经常使用命令(更新中)
- Python常用的几种常用的内置函数
- 2 Angular 2 的核心概念
- 【iOS系列】-xib封装使用