PowerShell+NetApi 批处理执行程序

基于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脚本
 1 # 控制台程序路径
 2 $key = Get-Item HKLM:\Software\Autodesk\Hardcopy
 3 $arr = @()
 4 foreach($value in $key.Property)
 5 {
 6     $arr += Get-Item HKLM:\Software\$value
 7 }
 8 
 9 $arr = $arr | sort
10 for($i=0;$i -lt $arr.Count;$i++)
11 {
12     $_values = Get-ItemProperty $arr[$i].PSPath
13     $s = "{0}.{1}" -f ($i+1),$_values.ProductName
14     [Console]::WriteLine($s)
15 }
16 $n = Read-Host "请选择AutoCad版本"
17 
18 
19 $_values = Get-ItemProperty $arr[[int]$n - 1].PSPath
20 
21 
22 $MyConsole = $_values.Location + "\accoreconsole.exe"
23 
24 # 设置进程启动信息
25 $psi= New-Object System.Diagnostics.ProcessStartInfo
26 
27 $psi.FileName = "cmd.exe"
28 
29 # 设置进程自动重定向输入
30 $psi.UseShellExecute = $false
31 $psi.CreateNoWindow=$true
32 $psi.RedirectStandardInput = $true
33 $process = New-Object System.Diagnostics.Process
34 $process.StartInfo = $psi
35 
36 #获取当前ps1文件所在的文件夹
37 
38 $ScriptPath=Split-Path -Parent $MyInvocation.MyCommand.Definition
39 
40 
41 $dllFileName=$ScriptPath+"\ShopDrawing.dll"
42 
43 $files=[System.IO.Directory]::GetFiles($ScriptPath,"*.dwg")
44 
45 foreach ($item in $files)
46 {
47     
48     [System.IO.FileInfo] $fi=New-Object System.IO.FileInfo($item)
49     if (!$fi.IsReadOnly){
50      $process.Start()
51      $process.StandardInput.WriteLine("""$MyConsole"" "+"/i"+" ""$item""")    
52      $process.StandardInput.WriteLine("SECURELOAD")
53      $process.StandardInput.WriteLine("0")
54      $process.StandardInput.WriteLine("netload")
55      $process.StandardInput.WriteLine("""$dllFileName""")
56      $process.StandardInput.WriteLine("FILEDIA")
57      $process.StandardInput.WriteLine("1")
58      $process.StandardInput.WriteLine("mySSsetTest")
59      $process.StandardInput.WriteLine("Qsave")
60      $process.StandardInput.WriteLine("QUIT")
61      $process.StandardInput.WriteLine("EXIT")
62      #$process.Kill()
63      #$process.Close()
64      Write-Host ""$item""批处理执行完成!" 
65     }
66     else
67     {
68         Write-Host ""“$item""被占用或者处于只读状态,批处理执行失败!" 
69         continue
70     }
71     
72 }
View Code


 PowerShell脚本下载地址:见第一条评论

 

posted @ 2019-06-05 20:11  南胜NanSheng  阅读(678)  评论(1编辑  收藏  举报