日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

如何使用PowerShell提升开发效率(以Windows Embedded CE为例)

發(fā)布時間:2023/12/9 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用PowerShell提升开发效率(以Windows Embedded CE为例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

本文講述如何使用Powershell通過RAPI來控制Windows Embedded CE和Windows Mobile設(shè)備。

?

緣由

我入行的時候是做AS400 RPG和UNIX C開發(fā)的,所有開發(fā)環(huán)境都是字符界面,因此習(xí)慣了vi+grep+make的開發(fā)模式。后來開始做Windows的開發(fā),開始也不大習(xí)慣,安裝了cygwin來使用,離不開命令行。其實合理使用命令行能大大簡化日常工作,我記得好像有本書叫做高效程序員,里面提到要合理使用命令行來簡化日常工作。我十分贊同這一說法,下面通過一個例子講述如何簡化工作。

AS/400的界面

?

UNIX的界面

?

??

Cygwin的界面

?

現(xiàn)在在從事Windows Embedded CE 6 R3的應(yīng)用程序開發(fā),由于某些原因,使用的設(shè)備沒有備份電池。因此每次重新啟動設(shè)備的時候,設(shè)備的時間會恢復(fù)到初始狀態(tài)。每次啟動系統(tǒng)后,我都需要手工修改設(shè)備的系統(tǒng)時間,至少需要20次的鼠標(biāo)點(diǎn)擊操作才能完成時間的設(shè)置。這是一件非常煩人的事情。作為程序員,應(yīng)該盡量把大量的重復(fù)操作交給計算機(jī)來做,因此我考慮使用腳本來完成時間的設(shè)置。然后我考慮使用微軟提供PowerShell來完成這一次任務(wù)。

?

為什么使用PowerShell

因為PowerShell可以和.NET Framework很好的結(jié)合在一起,可以整合現(xiàn)有的.NET的資源。開始我考慮使用CMD的批處理文件。我也曾經(jīng)使用過批處理文件來簡化編譯過程,這個自動編譯腳本還在使用,但是做過CMD批處理文件的人和做過UNIX Shell開發(fā)的人就會知道,CMD的批處理文件非常難使用,和任何一個shell比(SH, KSH, CSH, and BASH)都輸一大截。因此我放棄了使用CMD的想法,選擇了PowerShell。

?

安裝和配置PowerShell

使用PowerShell需要下載和安裝,請到?Download Windows PowerShell 1.0? 下載并安裝。需要.NET Framework 2.0的支持。

安裝完畢后需要修改Execution Policy,這是對執(zhí)行腳本的安全設(shè)置。因為PowerShell的默認(rèn)Execution Policy是Restricted,Restricted表示只能執(zhí)行單條命令,不能執(zhí)行批量腳本。如果執(zhí)行批量腳本會提示下面的錯誤。?

File C:\Temp\projects\DatetimeSync\DatetimeSync.ps1 cannot be loaded because the execution of scripts is disabled on th
is system. Please see "get-help about_signing" for more details.
At line:1 char:18
+ ./DatetimeSync.ps1 <<<<


因此需要通過Set-ExecutionPolicy RemoteSigned命令來修改Execution Policy。修改后就能執(zhí)行批量腳本了。

?

?

使用OpenNETCF Desktop Communication

由于PowerShell不支持直接操作Windows Embedded CE和Windows Mobile設(shè)備,因此需要借助RAPI來完成。如果使用.NET來開發(fā)RAPI,我們可以使用OpenNETCF Desktop Communication.關(guān)于OpenNETCF Desktop Communication和RAPI,我之前寫過一篇文章,可以參考

Windows Embedded CE和Windows Mobile下ActiveSync開發(fā).

先到OpenNETCF Desktop Communication Library下載,然后編譯生成OpenNETCF.Desktop.Communication.dll。下面提供的源碼已經(jīng)包含了該DLL,所以這一步可以省略。

?

PowerShell開發(fā)

先新建一個文本文件,把文件擴(kuò)展名改成ps1。例如我的文件叫做DatetimeSync.ps1 。然后就可以編寫腳本了。

注意,Windows不會自動把ps1的文件與PowerShell進(jìn)行綁定,每次執(zhí)行ps1文件需要打開PowerShell,然后使用點(diǎn)號(.)執(zhí)行,這與UNIX shell的風(fēng)格一致。?
例如下圖所示:

只是輸入DatetimeSync.ps1不能執(zhí)行該文件,需要輸入 ./DatetimeSync.ps1。

?

源碼

$dllPath = Get-Location
$dllPath = $dllPath.Path + "\OpenNETCF.Desktop.Communication.dll"
[System.Reflection.Assembly]::LoadFrom($dllPath) |Out-null
$rapi = New-Object OpenNETCF.Desktop.Communication.RAPI
echo "Connecting to device..."
$rapi.Connect()
if ($rapi.Connected)
{
$dt = get-date
$date = $dt.Month.ToString() + "-" + $dt.Day.ToString() + "-" + $dt.Year.ToString()
echo "Setting date [$date]..."
$rapi.CreateProcess("cmd", "/c date " + $date)

$time = $dt.Hour.ToString() + ":" + $dt.Minute.ToString() + ":" + $dt.Second.ToString()
echo "Setting time [$time]..."
$rapi.CreateProcess("cmd", "/c time " + $time)

echo "Finished"
}
else
{
echo "Cannot connect to the device, please check the physical connection."
}

Get-Location和get-date叫做cmdlet(讀作command-let),是代表一個單獨(dú)功能的命令。例如Get-Location表示取出當(dāng)前路徑,get-date表示取出當(dāng)前日期與時間。如果需要使用.NET的assembly,需要使用LoadFrom來反射加載。例子中把OpenNETCF.Desktop.Communication.dll加載進(jìn)來。 New-Object表示實例化對象,在例子中實例化OpenNETCF.Desktop.Communication.RAPI的對象rapi。有了rapi對象就可以調(diào)用RAPI的類的方法來操控Windows Mobile 和 Windows Embedded CE的設(shè)備了。在例子中首先調(diào)用Connect()方法來連接設(shè)備,然后使用CreateProcess()函數(shù)來調(diào)用cmd修改時間和日期。本來可以通過調(diào)用API?SetSystemTime來修改系統(tǒng)時間,但是如果這樣做,需要使用C++開發(fā)一個設(shè)備上的DLL,然后部署到設(shè)備上,為了簡化工作,我直接使用了cmd自帶的time和date功能來完成時間的修改。

?

目前為止,這個功能已經(jīng)實現(xiàn)了。使用PowerShell可以完成很多很多其他功能來簡化我們的工作,例如管理設(shè)備上的進(jìn)程,部署程序,啟動單元測試等等。請問您在開發(fā)中有使用工具來簡化工作嗎?如果有,歡迎討論。

?

如果您覺得文章不錯,請點(diǎn)擊支持,如果您覺得文章不好,請點(diǎn)擊反對,可以的話,請留言指正,您的反饋是我進(jìn)步的動力,謝謝。

參考

“How to” Series: Automating Windows Mobile with Windows PowerShell

?

源代碼:??/Files/procoder/DatetimeSync.zip



? ? 本文轉(zhuǎn)自Jake Lin博客園博客,原文鏈接:http://www.cnblogs.com/procoder/archive/2010/07/15/How-to-use-PowerShell-on-Windows-Embedded-CE.html,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的如何使用PowerShell提升开发效率(以Windows Embedded CE为例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。