分類: Microsoft

Powershell : Check time between a range to execute something.

Powershell : Check time between a range to execute something.

這是我這陣子在研究一段客製化的PS時候意外找到。


1
2
3
4
5
6
7
8
$str = Get-Date '09:25'
$end = Get-Date '09:30'
$now = Get-Date

if ($str.TimeOfDay -le $now.TimeOfDay -and $end.TimeOfDay -ge $now.TimeOfDay)
{
  Write-host "OK"
}

我想應該不用解釋太多。

$str : 設定開始時的時間
$end : 設定結束的時間
$now : 現在
如果開始的時間(9:25)<=現在的時間,同時結束的時間(9:30)>=現在的時間
就執行裡面的內容

附帶說明,可以替換的
-eq 等於
-ne 不等於
-ge 大於等於
-gt 大於
-lt 小於
-le 小於等於
-like Wildcard模糊比對(字元數字) – Wildcard comparison
-notlike Wildcard模糊比對(字元數字) – Wildcard comparison
-match 比對格式 – Regular expression comparison
-notmatch 比對相似 – Regular expression comparison
-replace 替換 -Replace operator
-contains Containment operator
-notcontains Containment operator
-in 類似於 -comtains,但是相反是動作
-notin 類似於 -notcontains ,但是是相反動作
 
Please follow and like us:
Powershell : Map a New Network Drive and  show in external environment(File Explorer).

Powershell : Map a New Network Drive and show in external environment(File Explorer).

有使用過Dos Command的應該都是知如何建立網路磁碟機。


1
Net use z: \\Fileserver\XXX

這很方面可以做成Script放在很多地方也行之有年了。
但是對於Powershell有偏執的,盡可能都會希望可以使用PS來執行一切的工作。

使用New-PSDrive可以建立網路磁碟機


1
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\Fileserver\XXX" -persist

但是,指令下完之後,檔案總管沒有任何動靜,在Powershell的視窗內去輸入Z:又能看到,使用Get-PSDrive,也能看到Z。原來是因為Powershell預設建立的網路磁碟機只能用在這個Session內,外面的世界(檔案總管….)是看不到的而且也不永久的。

我一開始以為-Persist,這個參數是可以讓PS所建立的磁碟機顯現出來,無奈怎麼試都沒有辦法。

找了一陣子終於被我發現,原來是另外一個參數 -Scope,所以實際上應該要把上面的只改成如下


1
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\Fileserver\XXX" -persist -Scope Global

這樣,外面的世界就能夠看的到了。

Please follow and like us:
Either there is no default mail client or the current mail client cannot fulfill the message request…..

Either there is no default mail client or the current mail client cannot fulfill the message request…..

這一篇其實是想說一個故事,一個令人很討厭的Message box.

如果事情有這麼像表面的簡單,到Setting > System > Default apps裡面去把 Email改成Outlook這麼簡單的事情,我肯定不會寫成一篇文章。
P.S.先說一下這邊的系統是建立在Windows 10 X64 with Office 2013 X64。

我去谷哥大神查了好多的網站論壇,回答大都千篇一律。
1. 移除Office重新安裝
2. 刪除機碼”們”之後對Office做修復動作。
HKLM:\\Software\Clients\Mail\Microsoft Outlook
HKLM:\\SOFTWARE\Wow6432Node\Clients\Mail\Microsoft Outlook
HKLM:\\SOFTWARE\Microsoft\Office\15.0
….族繁不及備載….

反正怎麼做都沒用,只要Outlook一開他很快就會依直跑出來。
後來我突然發現,錯誤訊息跳出來的時候下面的圖示一定是放大鏡

這是Windows 索引服務的圖示,突然給我一點靈感。跑去Outlook的Index Option看看(其實Index Option是系統內建的,設定的是整個Windows的索引服務)

點Modify之後,怪了,為什麼有兩個Outlook?名字還不一樣。

我的直覺告訴我,應該取消其中一個有機會讓這個錯誤訊息消失,我會有這種感覺是因為之前這台電腦曾經裝過Office 2010 Stand X64。

但是我發現我只能把Microsoft Oulook取消掉不納入索引範圍,那個Microsoft Office Outlook永遠都在上面(上面圖因為已經修改過所以看起來是可以取消,本來其實是反灰的)

我看看了一下我的電腦(Windows 10 X64 with Office 2013 X64)跟他環境相同,但是我從來沒裝過Office 2010

我的只有Microsoft Outlook而已,所以我應該能斷定Microsoft Office Outlook應該是舊的Outlook留下來的。

我在谷哥的搜尋方向開始朝向如何移除Indexed Location來著手。
我跳過Index Rebuild,因為我覺得肯定沒用!
我直接嘗試重作整個Index File
1. 停止(Stop)並停用(Disable) Windows Search服務
2. 找到C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb
3. 改名或刪除
4. 啟動(Start)並啟用(AUTO-Start-Delay) Windows Search服務
(有可能第一次出現 失敗因為他找不到原來的Windows.edb,再按一次啟動即可)
然後他就會開始自動重作Windows索引。

然後結論還是沒用,只要Outlook打開依然跳出討厭的畫面。

後來我想了很久,Windows 的設定根本上都是寫在機碼裡,我去找找看他放在哪裡。這Location我真的找了一陣子才找到原來他是在這裡
HKLM:\\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\WorkingSetRules

但是這麼多項目看起來怎麼跟圖形介面的項目對不起來。
後來點進去機碼發現了事有蹊俏。裡面有的值URL上面記載的資料大部分都是路徑。

結果我看到了個眼熟的值
mapi15://{S-1-5-21-1715567821-1326574676-725345543-997407}/

mapi指的是郵件的通訊協定,而我在他的電腦發現了 一組mapi15開頭,另一組是mapi開頭的,我對照了一下我電腦的機碼,發現我的只有mapi15開頭的而已。
如此一來我應該可以斷定mapi開頭的應該就是舊版的Microsoft Office outlook。我抱著必死的決心,想說反正機碼備份出來,萬一壞掉在Import回去就好了。
最壞狀況頂多就是重灌而已。
右鍵選Delete…登愣…..不給刪!我想也是,如果有這麼簡單就好了

我來看看機碼的權限。連管理員都動不了它,只有TrustedInstall和WSearch這兩個服務帳號可以動它而已。

這太殘忍了,再繼續調整谷哥的搜尋方向,看看我要如何才能達成目標。

後來在某論壇找到有人把Index Location 弄亂掉想要重設回預測值,下面有人回答了,原來,需要用特殊技巧才有辦法

https://superuser.com/questions/707628/how-reset-indexing-locations-windows-8-1

這篇大致上說明了原因和做法,用正常的方式是沒有辦法更動裡面任何的機碼。
所以請按照下面的方式來做。

  1. Settings > Update & Security >Recovery > Advanced Startup > Restart now
  2. Troubleshoot > Advanced options > Command Prompt
  3. 出現命令視窗之後輸入regedit,將會打開機碼編輯視窗
  4. 你所看到的機碼,可能不是你原來系統的機碼而是Windows Recovery環境的。
  5. 左邊Panel 點選HKLM之後,右鍵Load Hive,去尋者原來電腦裡面的系統磁碟(Windows安裝磁碟),它有可能不是C,也許是D或是E。你可以利用命令提示字元視窗用dir或是機碼Load檔案的視窗去確認你原來的系統在哪裡。
  6. 我運氣很好Windows Recovery用的是X,所以我原來的系統就在C, 所以我點了HLKM右鍵Load Hive : C:\Windows\System32\Config\Software
  7. 它會談出一個視窗,給他一個名字(隨意看得懂就好),例如SOFTWARE_real,接著你就會看到機碼視窗再SOFTWARE下面多了一個SOFTWARE_real。
  8. 然後到這裡面,剛剛那個刪不掉的機碼就能夠刪掉了。
  9. 刪完關閉機碼視窗輸入Exit
  10. 回到Troubleshoot畫面選Exit and Continue to Windows。

回到正常Windows重新檢查Index Option > Modify > Indexed Location,雖然惱人的Microsoft Office Outlook還在,但是它的勾勾不見了,也就是他不會列入索引服務的範圍了。

然後測試Outlook打開之後,就沒有再跳出來了!

我想這大發現至少讓我免除浪費重灌的時間了!

Please follow and like us:
Powershell : Add/Remove Local User/Group

Powershell : Add/Remove Local User/Group

這裡介紹如何使用Powershell去新增/移除本機使用者/群組

下面是先設定手動輸入指定的密碼為變數$PWD,按下Enter後直接輸入密碼他會以****的方式來呈現,書完成按Enter即可。


1
$PWD = Read-Host -AsSecureString

再來就是新增使用者CW1TMS(登入帳號)
密碼使用變數$PWD,只要你Powershell視窗不關,你可以一直使用這個密碼。
設定顯示定名稱為CW1TMS。
設定描述為For CW1 UAT。


1
New-LocalUser "CW1TMS" -Password $PWD -FullName "CW1TMS" -Description "For CW1 UAT."

然後在圖形介面就會看到剛剛新增的使用者。

接著再來新增本機群組Test1,描述為Test1。


1
New-LocalGroup "Test1" -Description "Test1"

圖形介面同樣會看到。

再來是我要把CW1TMS這個剛剛新增的使用者加入Test1這個群組


1
Add-LocalGroupMember -Group "Test1" -Member "CW1TMS"

既然有新增就要有移除。
第一行是移除使用者CW1TMS。
第二航是移除群組Test1。


1
2
Remove-LocalUser "CW1TMS"
Remove-LocalGroup "Test1"

這是最基礎的,方便你搭配Script來做批次處理,您說是不是很方便呢!
下面有個範例,建立CW1TMS帳號,連同密碼不用手打(自動轉為SecureString)。
建立完帳號之後自動加入Administrators群組。


1
2
3
4
5
6
$USR = "CW1TMS"
$PWD = ConvertTo-SecureString "P@ssW0rd" -AsPlainText -Force
$FUN = "CW1 TMS"
$DSP = "CW1TMS Local User."
New-LocalUser $USR -Password $PWD -PasswordNeverExpires -FullName $FUN -Description $DSP
Add-LocalGroupMember -Group Administrators -Member $USR
Please follow and like us:
Downloading Language Dictionary..

Downloading Language Dictionary..

Windows 10 CBB version安裝額外語系之後,會發生無法使用中文輸入法的窘境。尤其碰到Windows 是加入網域管理並且有設定WSUS或是管控Windows update不能直接跟微軟下載(或著其實這是個Bug?)而導致一直出現的錯誤訊息

永遠無法切換成中文輸入法。中間有嘗試過就算安裝語言包也沒用的…後來無意間發現的,裝完的電腦C:\Windows\IME\IMETC\DICTS裡面只有mshwchtrIME.dll之外什麼都沒有。於是乎從正常的Windows 10把上述目錄下面所有的檔案複製進去,就通通都正常了!

我不能肯定是1803 CBB版本的Bug或是我們總部打包的Image有問題,總之後碰到這類問題,這樣應該都是可以解的。

Please follow and like us:
Windows 10 CBB vSwitch Network Broken

Windows 10 CBB vSwitch Network Broken

公司Deploy新的CBB版本Windows 10(1803),一開始使用上也沒什麼問題。一開始也沒注意到為什麼安裝完預設就把HyperV的Service掛起來,導致網卡多了一個vEthernet(Default Switch),想想未來可能會增加對User Troubleshutting 的麻煩。還是移除的好。

移除完重開,網卡就會正常了。虛擬網卡同時也會消失。

Please follow and like us:
Use Powershell to detect Windows 10 version ( CBB/LTSC)

Use Powershell to detect Windows 10 version ( CBB/LTSC)

Windows 10 除了市面上看到的家用 / 專業 / 企業 / 教育之外,商務使用有另外區分為CBB/LTSB(C)。詳見https://docs.microsoft.com/zh-tw/windows/deployment/update/waas-overview

在這裡我想用Powershell判斷到底Windows 10是CBB / LTSB(C?),因為手上只有CBB和LTSB版的Windows 10 ,所以我也不能確定LTSC的結果是否雷同。


1
gwmi win32_operatingsystem

用Powershell跑完上面的指令會得到一些無用的概略資訊。但其實我只需要針對裡面OperatingSystemSKU這個值而已,所以在後面加參數。


1
gwmi win32_operatingsystem | Select OperatingSystemSKU

在這裡說明一下:CBB 版本會得到4,LTSB(C?)會得到125

但是,這種呈現方式,我很放到Powershell裡面轉成變數,所以還要加個參數


1
gwmi win32_operatingsystem | Select -ExpandProperty OperatingSystemSKU

這樣你就只會看到值,如此一來你就可很方便的放到你的Powershell Script去判斷Windows 10版本了,另外125這數值怎麼出來的我在官方文件一職沒找到

倒是其他各式各樣數值的有表可查如下方連結

https://docs.microsoft.com/zh-tw/windows/desktop/CIMWin32Prov/win32-operatingsystem

這裡有個小小的範例可以參考一下!


1
2
3
4
5
6
7
8
9
10
11
12
$SKU = gwmi win32_operatingsystem | Select -ExpandProperty OperatingSystemSKU
Switch ($SKU)
{
4
    {
    Write-Host Your OS is CBB
    }
125
    {
    Write-Host Your OS is LTSB
    }
}

以上感謝收看!

Please follow and like us:
Adobe Reader not allow connection.

Adobe Reader not allow connection.

在某些情況下使用Adobe Reader開啟PDF會出現下列的錯誤訊息

此時必須要檢視Adobe設定,請到Edit下面的Preferences

到Trust Manager 的 Internet Access from PDF File outside the web browser裡點選Change Settings

確認一下Web Sites裡有沒有被Always Block的UNC路徑或是Website,選定後點選Delete刪除即可。

Please follow and like us: