如何使用PowerShell提升開發效率(以Windows Embedded CE為例)

簡介

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

?

緣由

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

AS400

AS/400的界面

?

UNIX

UNIX的界面

?

cygwin_shell??

Cygwin的界面

?

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

?

為什么使用PowerShell

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

?

安裝和配置PowerShell

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

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

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。修改后就能執行批量腳本了。

image

?

?

使用OpenNETCF Desktop Communication

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

Windows Embedded CE和Windows Mobile下ActiveSync開發.

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

?

PowerShell開發

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

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

image

只是輸入DatetimeSync.ps1不能執行該文件,需要輸入 ./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),是代表一個單獨功能的命令。例如Get-Location表示取出當前路徑,get-date表示取出當前日期與時間。如果需要使用.NET的assembly,需要使用LoadFrom來反射加載。例子中把OpenNETCF.Desktop.Communication.dll加載進來。 New-Object表示實例化對象,在例子中實例化OpenNETCF.Desktop.Communication.RAPI的對象rapi。有了rapi對象就可以調用RAPI的類的方法來操控Windows Mobile 和 Windows Embedded CE的設備了。在例子中首先調用Connect()方法來連接設備,然后使用CreateProcess()函數來調用cmd修改時間和日期。本來可以通過調用API?SetSystemTime來修改系統時間,但是如果這樣做,需要使用C++開發一個設備上的DLL,然后部署到設備上,為了簡化工作,我直接使用了cmd自帶的time和date功能來完成時間的修改。

?

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

?

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

參考

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

?

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



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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻圖像傳輸學習筆記-基礎小知識(一)

攝像頭DVP與MIPI區別 DVP是并口&#xff0c;需要PCLK、VSYNC、HSYNC、D[0&#xff1a;11]——可以是8/10/12bit數據&#xff0c;看ISP或baseband是否支持&#xff1b;總線PCLK極限大約在96M左右&#xff0c;而且走線長度不能過長&#xff0c;所有DVP最大速率最好控制在72M以…

java程序員面試交流項目經驗

粘貼自&#xff1a;https://blog.csdn.net/wangyuxuan_java/article/details/8778211 1&#xff1a;請你介紹一下你自己 這是面試官常問的問題。一般人回答這個問題過于平常&#xff0c;只說姓名、愛好、工作經驗&#xff0c;這些簡歷上都有。其實&#xff0c;面試官最希望知道…

Windows7旗艦版磁盤分區詳解—附分區步驟截圖

最近工作中配置使用聯想的Thinkpad TL系列本本.當然原裝的系統時剛發布的Windows RTM旗艦版.在考慮買之前也參考了戴爾 蘋果的等等, 但個人私下也是一直在用Tinkpad系列, 相比其他的品牌本人還是比較鐘情于Tinkpad 非常實用的鍵盤. 以及簡潔的外觀.買回來一看這個TL系列原裝的系…

outlook存檔郵件_如何在Outlook 2013中存檔電子郵件

outlook存檔郵件We’ve always been told that backing up our data is a good idea. Well, that same concept can extend to email as well. You may want to archive your email every so often, such as monthly, quarterly, or even yearly. 我們一直被告知備份數據是一個…

洛谷 P1736 創意吃魚法(多維DP)

題目描述 回到家中的貓貓把三桶魚全部轉移到了她那長方形大池子中&#xff0c;然后開始思考&#xff1a;到底要以何種方法吃魚呢&#xff08;貓貓就是這么可愛&#xff0c;吃魚也要想好吃法 ^_*&#xff09;。她發現&#xff0c;把大池子視為01矩陣&#xff08;0表示對應位置無…

計算機組裝和維護_如何構建自己的計算機,第二部分:組裝在一起

計算機組裝和維護So you’ve selected your parts, double- and triple-checked their compatibility, and waited for economy shipping to bring them all to your door. It’s time to get to the fun part: putting them all together. 因此&#xff0c;您已經選擇了零件&a…

Python學習-集合的常見用法

st [1,2,3,4,5] ct [2,3,4,5,76] list set(["name", list, try]) list2 set(["name", list, try, but, test]) # 兩個列表去重&#xff0c;利用集合st set(st) #設為集合 ct set(ct) print(st, type(st))sct0 st.union(ct) #并集 sct st | ct …

Autofac之自動裝配

從容器中的可用服務中選擇一個構造函數來創造對象&#xff0c;這個過程叫做自動裝配。這個過程是通過反射實現的 默認 思考這么一個問題,如果注冊類型中存在多個構造函數,那么Autofac會選擇哪一個來創建類型的實例 答案是"盡可能最多參數" class ConstructorClass {p…

對Emlog 6.0 Beta的完整代碼審計過程

Emlog 6.0 beta版本&#xff0c;這可能是最后一篇關于PHP語言CMS的代碼審計文章&#xff0c;此次將詳細記錄完整的審計過程。 文章基本上完整記錄小東的對此CMS審計過程&#xff0c;或許顯得繁瑣&#xff0c;但代碼審計的過程就是這樣&#xff0c;發現可能項&#xff0c;然后精…

SINOCES 2011

突然發現又好久沒寫過日志了 是在是太懶了… 難得休假去看了眼消費電子 感覺實在是一年不如一年 佳能、索尼不見蹤影&#xff0c;相機滿場沒見一家&#xff08;大牌子是真沒見到&#xff09; 華碩技嘉微星等主板廠商同樣失蹤… PC方面&#xff0c;聯想貌似是來賣電腦包鼠標的&a…

esim卡與ms卡的區別_什么是eSIM,它與SIM卡有何不同?

esim卡與ms卡的區別With the launch of the Apple Watch 3, the term “eSIM” has been thrown around a lot. And now, Google’s Pixel 2 is the first phone to use this new technology, it’s time we take a closer look at what it is, what it does, and what this me…

機器學習實戰之logistic回歸分類

利用logistic回歸進行分類的主要思想&#xff1a;根據現有數據對分類邊界建立回歸公式&#xff0c;并以此進行分類。 logistic優缺點&#xff1a; 優點&#xff1a;計算代價不高&#xff0c;易于理解和實現。缺點&#xff1a;容易欠擬合&#xff0c;分類精度可能不高。 .適用數…

HDU 6343.Problem L. Graph Theory Homework-數學 (2018 Multi-University Training Contest 4 1012)

6343.Problem L. Graph Theory Homework 官方題解: 一篇寫的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - [(偽裝成圖論題的)簡單數學題] 代碼: 1 //1012-6343-數學2 #include<iostream>3 #include<cstdio>4 #include<cstring>5 #include<…

Android GridView LruCache

照片墻這種功能現在應該算是挺常見了&#xff0c;在很多應用中你都可以經常看到照片墻的身影。它的設計思路其實也非常簡單&#xff0c;用一個GridView控件當作“墻”&#xff0c;然后隨著GridView的滾動將一張張照片貼在“墻”上&#xff0c;這些照片可以是手機本地中存儲的&a…

如何在Android TV上自定義推薦行

When you fire up Android TV, the first thing you see is a list of movies and shows the system thinks you’ll like. It’s often full of the latest flicks or hottest news, but sometimes it could just be things relevant to your interests and the apps you have…

遞歸 段錯誤 習題

段錯誤 遞歸里面算階乘 f(10000000)沒有輸出&#xff0c;使用gdb 顯示 SIGSEGV--段錯誤編譯后產生的可執行文件里面保存著什么&#xff1f;UNIX/Linux 用 ELFDOS下用COFFWindows用PE&#xff08;COFF擴充而得&#xff09;段&#xff08;segmentation&#xff09;二進制文件內的…

你知道你常用的dos和linux命令嗎?

功能 Linux MS-DOS 進入到該目錄 cd cd 列舉文件 ls dir 創建目錄 mkdir mkdir 清除屏幕 clear cls 復制文件 cp copy 移動文件 mv move 刪除文件 rm del 查看文件 less more 文件重命名 mv ren 比較文件內容 diff fc 查看當前路徑 pwd chd…

steam串流到手機_如何從手機將Steam游戲下載到PC

steam串流到手機Steam allows you to remotely install games from your smartphone, just like you can with a PlayStation 4 or Xbox One. You can download games to your gaming PC from anywhere, ensuring those big downloads are complete and the game is ready to p…

編寫安裝配置ftp-samba服務腳本

本腳本實例的要求如下&#xff1a; 1、公司有公共共享目錄public,所有員工均可讀寫&#xff0c;但不允許刪除其他員工的文件;不能匿名登錄 2、每部門均有共享目錄&#xff0c;部門經理可讀寫&#xff0c;部門員工可讀&#xff1b; 非本部門員工不能訪問&#xff08;caiwu、rens…

利用java實現excel轉pdf文件

在有些需求當中我們需要抓取字段并且填充到excel表格里面&#xff0c;最后將excel表格轉換成pdf格式進行輸出&#xff0c;我第一次接觸這個需求時&#xff0c;碰到幾個比較棘手的問題&#xff0c;現在一一列出并且提供解決方案。 1&#xff1a;excel轉pdf出現亂碼&#xff1a; …