前言
先前寫了一個定時檢查server 硬碟空間大小的程式,但沒有寫目前的使用量幾%今天要補上的時候,才發現Powershell的多參數傳遞方式跟別人不一樣。
Get-Service –name e*,*x*
表達式 | 中文 |
-eq | 等於 |
-ne | 不等於 |
-ge | 大於或等於 |
-le | 小於或等於 |
-gt | 大於 |
-lt | 小於 |
-and | 而且 |
-or | 或 |
-not | 取值的相反 |
-like -nolike -clike | 可接受* ,做查詢 忽略大小寫 區分大小寫 |
-match | 正則表達式 |
Show-Command get-childitem
New-Item testfolder -ItemType Directory
Set-Location -Path HKCU:
&
所以完整語法
$Path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
$parm = "http://tw.yahoo.com http://www.pchome.com.tw"
$Parms = $Parm.Split(" ")
& $Path $parms
Get-Alias 可以看到所有的對應表
Get-Alias DIR 可以看到 這個指令的別名
Get-Command | Measure-Object 可以計算命令的加總數量
Get-Command *service* 尋找
Update-Help
Get-EventLog
[-LogName] <string>
[[-InstanceId] <long[]>]
[-ComputerName <string[]>]
[-Newest <int>][-After <datetime>]
[-Before <datetime>]
[-UserName <string[]>]
[-Index <int[]>][-EntryType <string[]>]
[-Source <string[]>]
[-Message <string>]
[-AsBaseObject][<CommonParameters>]
[-LogName] <string> 為必選,因沒有用中括號 [ ] 將 指令及參數包起來
[-ComputerName <string[]>] 為可選,因為使用了 [ ] 將指令及參數包起來
[[-InstanceId] <long[]>] 同上,為可選,但InstanceId 又用了中括號包起來,表示此參數又為可選,
又稱定位參數,在輸入時可以省略-InstanceId 不用打,直接輸入參數,但須注意參數的位置
Form | Meaning |
[[-Param] T] | Optional parameter of type T with the name optional |
[-Param T] | Optional parameter of type T with the name required |
-Param T | Required parameter of type T |
[-Param] | A switch (flag) |
今天碰到個奇耙的要求,說軟體無法安裝是因為要在獨立網路上安裝。
好…你這樣說我照這樣做。
hyperV的複寫完成,網路全部封掉。
但重點來了,我還有資料夾要複製過去怎麼複製?
實體機還能插usb,但虛擬機阿…..
以前VM能夠直接在實體機上用複製貼上的方式將檔案丟過去,
所幸HyperV也有類似的功能,叫做客體服務。
開啟方式,
虛擬機->設定->整合服務->客體服務(打勾)
實體機->HyperV設定->加強的工作階段模式原則->允許加強工作階段模式(打勾)
重開機後到虛擬機的服務裡面 看 『Hyper-V客體服務介面』 的服務是不是為已啟動。
網管人裡面的那招檔案總管的複製貼上,我一直都沒試成功
(剛剛看到才發現是不是只能丟單檔?)。最好只好用指令的方式將資料夾丟過去。
copy-VMFile -Name "虛擬機 " -SourcePath 來源路徑
-DestinationPath 來源路徑 -FileSource Host
copy-VMFile 指令參考 安逸悠嫻學習筆記
但這只有單檔…整個資料夾檔案那麼多一個一個打真的會起校。
最後發現 GitHubGist 有人丟了一篇 複製整個資料夾的。
小改一下後,收工。
function copy-foldertovirtualmachine {
param(
[parameter (mandatory = $true, valuefrompipeline = $true)]
[string]$VMName,
[string]$Folder = 'E:\M030_service information manager-CPS11'
)
foreach ($File in (Get-ChildItem $Folder -recurse | ? Mode -ne 'd-----'))
{
#$File2 = $File.Replace("E:\","C:\123\")
Copy-VMFile -VM (Get-VM $VMName) -SourcePath $File.fullname -DestinationPath $File.fullname.Replace("E:\","C:\123\") -FileSource Host -CreateFullPath -Force
}
}
copy-foldertovirtualmachine
使用方式,開啟power shell ISE
把指令放上去,後直接執行,會要求你輸入 『虛擬機的名稱』
要複製的資料夾位置 請更改 $Folder 後面的位置
#$File2 = $File.Replace("E:\","C:\123\")
這一段是錯的,所以mark掉,因為$File已經變成路徑的物件,
所以不能取代字串,執行會發生錯誤。
但虛擬機上面沒有E槽怎辦,DestinationPath的後面 指的是 目標的路徑,
加上.fullname會變成字串,
此時就可以用replace 將位置取代。