2020-12-30

Azure Note: ADDS integrated Azure File Share with Private Endpoint

 ADDS integrated Azure File Share

1. Azure vNet DNS set to ADDS DNS

2. Add Private DNS zone (Or Auto Create in Step 3.2.3)
2.1 Named: privatelink.file.core.windows.net
2.2 Add Virtual Network Link

2020-12-28

PowerPoint 存成圖片檔的解析度調整

PowerPoint 很小氣,預設輸出圖片只有 1280x720
如果需要輸出高解析度的話必須要修改註冊機碼

微軟說明在此:
https://docs.microsoft.com/en-us/office/troubleshoot/powerpoint/change-export-slide-resolution

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\PowerPoint\Options

2020-12-25

Powershell Password Generator

$Password =  ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".tochararray() | sort {Get-Random})[0..15] -join ''

$Password

$Password =  ("!@#$%^&0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".tochararray() | sort {Get-Random})[0..15] -join ''

$Password

for ($i=0;$i -lt 20;$i++) {
    ("!@#$%^&0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".tochararray() | sort {Get-Random})[0..15] -join ''
};

https://passwordsgenerator.net/

2020-12-21

Copy VM Disk on Azure

$ResourceGroup = "ResourceGroupName"
$SourceDiskName = "SourceDiskName"
$TargetDiskName = "TargetDiskName"

$SourceDisk = Get-AzDisk -ResourceGroupName $ResourceGroup -DiskName $SourceDiskName

$DiskConfig = New-AzDiskConfig -SourceResourceId $SourceDisk.Id -Location $SourceDisk.Location -CreateOption Copy -DiskSizeGB $SourceDisk.DiskSizeGB -SkuName "Premium_LRS"

New-AzDisk -Disk $DiskConfig -DiskName $TargetDiskName -ResourceGroupName $ResourceGroup

2020-12-11

Apache .htaccess 去除網址最後一個元素

傳 imagemap Message Type 的圖片 URL 給 Line 的時候
Line 會用 https://xxx/Path/To/image.png/1040 取代 https://xxx/Path/To/image.png

由於我只要提供一張圖片而已不區分解析度,所以想用 mod_rewrite 的方式處理
因為不熟悉正規表達式,網路搜尋老半天後暫時只能用以下方式處理

不知道那個 /Path/To/ 要怎麼用變數取代,否則就只能寫 .htaccess 在該路徑
並把 Path/To 寫 Hard Code 進去 Orz

RewriteEngine On
RewriteRule ^(.*)/1040 /Path/To/$1 [L]

如果有人會的話竟請不吝提供 m(_ _)m

2020-12-10

PowerShell Save Credential to file for futher use

Section 1: Create Password File

# Get Password
$PassWord = Read-Host -Prompt 'Please Enter Password';

# Convert to System.Security.SecureString
$PassWord = ConvertTo-SecureString -String 
$PassWord -AsPlainText -Force

# Encrypt it
$Encrypted = ConvertFrom-SecureString -SecureString $Password

# Save to File
$Encrypted | Set-Content Encrypted.txt
Section 2: Read Password File
# Read From File and Convert to System.Security.SecureString
$Password = Get-Content Encrypted.txt | ConvertTo-SecureString

2020-12-08

取得 AD 群組成員階層結構 Get AD Group Members Hierarchy

先參考這篇 取得 AD 群組成員的指令 Group Members List 

本篇為進階用,產生報表用

#-------------------------------------------------------
$OUFileter = 0
$UserOU = "OU=Users,DC=Contoso,DC=com"

$Groups = @()
$Groups += "Users_Group"
#-------------------------------------------------------

Integrated Windows Authentication with Apache 2.4 on Windows

Download mod_authnz_sspi from Here (The ApacheHaus US)

Uncompress it and copy mod_authnz_sspi.so to Apache\modules

Add Configuration in http.conf

LoadModule authnz_sspi_module modules/mod_authnz_sspi.so

2020-12-01

快速調整 User Profile Disk 磁碟與分割區大小

快速調整 User Profile Disk 磁碟與分割區大小
紅色部份為應調整參數

$ExtendDiskSize = 16; #in GB

$DiskPartCommandFileName = ((Get-Location).Path + '\DiskPartCommand.txt');

$ExtendDiskSize = ($ExtendDiskSize*1024*1024*1024);
$VHDxs = Get-ChildItem -path 'C:\VirtualDisks\Pool' -Recurse -Filter "*.vhdx" | select FullName;

在不支援 Hyper-V 虛擬化技術的機器上使用指令安裝 Hyper-V Role

只不過想用個 Resize-VHD 指令
被罵說沒有 Hyper-V Role,但這台機器 (Azure VM) 又不支援巢狀虛擬化 (懶得去設定)
只好用指令裝起來,但要記得裝好重開機之前用第二行指令設定開機時不要跑 Hypervisor
不然應該會壞掉

dism /online /enable-feature /featurename:Microsoft-Hyper-V
bcdedit /set hypervisorlaunchtype off

2020-11-26

Rename VM Disk on Azure

$ResourceGroup = "ResourceGroupName"
$SourceDiskName = "OsDisk_12345678"
$TargetDiskName = "NewDiskName"
$VMName = "VMName"

$SourceDisk = Get-AzDisk -ResourceGroupName $ResourceGroup -DiskName $SourceDiskName

$DiskConfig = New-AzDiskConfig -SourceResourceId $SourceDisk.Id -Location $SourceDisk.Location -CreateOption Copy -DiskSizeGB $SourceDisk.DiskSizeGB -SkuName "Premium_LRS"
New-AzDisk -Disk $DiskConfig -DiskName $TargetDiskName -ResourceGroupName $ResourceGroup

$VM = Get-AzVm -ResourceGroupName $ResourceGroup -Name $VMName
$TargetDisk = Get-AzDisk -ResourceGroupName $ResourceGroup -Name $TargetDiskName
Set-AzVMOSDisk -VM $VM -ManagedDiskId $TargetDisk.Id -Name $TargetDisk.Name
Update-AzVM -ResourceGroupName $ResourceGroup -VM $VM

Remove-AzDisk -ResourceGroupName $ResourceGroup -DiskName $SourceDiskName -Force

2020-11-24

WVD Scale session hosts Without using Azure Automation

There is a lot of stuff to study to use Azure Automation.
Therefor I Write a simple PowerShell Script to manage the Scaling of WVD Pool.

You have to use the script with saved credential. (Reference)

######## Script Start ########

$ResourceGroupName = 'WVD_Infrastructure'; # ResourceGroup that contains HostPool 

$WorkDayTimeStart = '08:30';

$WorkDayTimeEnd = '18:30';


$WorkTimeAvailableSessionThreshold = 2; #New VM will Start if remain this session only

$RestTimeAvailableSessionThreshold = 0; #New VM will Start if remain this session only

$CredentailFileName = "AzCredential.txt";

2020-11-18

Get CPU Utilization Average of a VM in WVD HostPool in time period

$TimePeriod = 30;
$ResourceGroupName = 'ResourceGroupName';
$HostPoolName = 'HostPoolName';

#-------------------------------

$EndTime = Get-Date;
$StartTime = $EndTime.addminutes(-$TimePeriod)

Get-AzWvdUserSession -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName | select UserPrincipalName,ActiveDirectoryUserName,ApplicationType,Name,SessionState

$HostPool = $(Get-AzWvdSessionHost -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName);

ForEach ($HostName in $HostPool) {
$CPUUtilizationSum = 0;
        $HostCPUUtilization = Get-AzMetric -ResourceId $HostName.ResourceId -MetricNames "Percentage CPU"  -TimeGrain 00:01:00 -DetailedOutput -StartTime $StartTime -EndTime $EndTime; $HostCPUUtilization.Data.Average.ForEach({$CPUUtilizationSum += [int]$_;}); $CPUUtilizationAverage = ($CPUUtilizationSum / $HostCPUUtilization.Data.Average.Length) write-host ('' + $HostName.Name + "`t" + $CPUUtilizationAverage);
};


2020-11-10

PTC ProE / WildFire / Cero Browser Default Page Setting and RDP Lag

Default Page Setting:

    Put these into config.pro

        web_browser_homepage about:blank
        enable_3dmodelspace_browser_tab no
        enable_partcommunity_tab no
        enable_resource_browser_tab no

Lag in RDP (Remote Desktop Protocol) Session

    Set the graphics option to win32_gdi by shortcut:

        ...\bin\proe.exe -g:win32_gdi

    Or put these into config.pro

        graphics win32_gdi

Other Issue:

How to make scroll wheel zoom work in Windows 10






Or Set Mapkeys:

mapkey zi @MAPKEY_NAMEZoom in;@MAPKEY_LABEL>Zoom in;\
mapkey(continued) ~ Activate `main_dlg_cur` `ProCmdViewZoomIn.view`;
mapkey zo @MAPKEY_NAMEZoom out;@MAPKEY_LABEL>Zoom out;\
mapkey(continued) ~ Activate `main_dlg_cur` `ProCmdViewZoomOut.view`;
mapkey $F2 @MAPKEY_NAMEDefine Zoom box;@MAPKEY_LABEL>Zoom In;%zi;
mapkey $F3 @MAPKEY_NAMEZoom Out;@MAPKEY_LABEL>Zoom Out;%zo;


Azure WVD User Profile Disk FSLogix Service Registry Settings Note

HKEY_LOCAL_MACHINE\SOFTWARE\FSLogix\Profiles

Enabled
VHDLocations
VolumeType
SizeInMBs (Hexadecimal)
IsDynamic
KeepLocalDir
DeleteLocalProfileWhenVHDShouldApply
FlipFlopProfileDirectoryName
PreventLoginWithFailure
PreventLoginWithTempProfile

For more information, please refer to this article

Convert Certification (.cer / .crt) to Base64

Convert-CertificateBinaryToBase64 -Sourcefile 'C:\Cert\Certification.cer' -DestinationFile 'C:\Cert\CertificationCER.txt'

Convert-CertificateBinaryToBase64 -Sourcefile 'C:\Cert\Certification.crt' -DestinationFile 'C:\Cert\CertificationCRT.txt'

function Convert-CertificateBinaryToBase64 {
Param( [String]$SourceFile, [String]$DestinationFile )
$Cert = Get-Content "$SourceFile" -Encoding Byte
$Content = @(

    '-----BEGIN CERTIFICATE-----'
    [System.Convert]::ToBase64String($Cert, 'InsertLineBreaks')
    '-----END CERTIFICATE-----'
);
$Content | Out-File -FilePath "$DestinationFile" -Encoding ASCII
};

Update Azure-NSG (Network Security Group) Policy with PowerShell

 Prerequest

  1. Install-Module -Name Az
  2. Connect-AzAccount
  3. NSG Name begin with OOOO_ (Notice there is a '_' after NSG Name)

Behavior:

  1. Search the old NSG with 'NSG Name_'
  2. Ensure there is only ONE NSG with 'NSG Name_'
  3. Create a new NSG with 'NSG Name_' plus Date Time and priority start from 201 (can be adjust)
  4. Check if the new NSG created successfully
  5. Find All NICs connect to the Old NSG
  6. Migrate All NICs found to the New NSG
  7. Remove Old NSG
Sample:
  1. Allow outbound connect to Azure WVD Service
  2. Allow outbound connect to 192.168.0.1
  3. Allow inbound connect from 192.168.0.1 only

Connect-AzAccount with Saved Encryped Credential in Powershell

# First Create Credential File

$CredentailFileName = "AzCredential.txt";

$Credential = Get-Credential

$UserName =[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Credential.UserName))
$Password = ConvertFrom-SecureString -SecureString $Credential.Password -Key (1..16)

($UserName,$Password) | Set-Content -Path $CredentailFileName

2020-11-03

Hp Server Windows Server CPU Loading 0%

遇到了莫名其妙的問題來記錄一下

因為 VM 效能突然變得超差,幾乎無反應無法運作
檢查發現 Hyper-V Host 出現 CPU Loading 0% 的情況
這台是 HP Server 運作 Windows Server 

2020-09-28

Office365 無法啟動結果是 Windows Event Log 起不來

今天遇到了一個不知怎麼發生問題
User 的 Office 365 無法完成產品啟動 (原本使用中都沒問題)
如果去執行產品啟動會出現如下錯誤,但網路明明就是通的

2020-08-14

以 Logon Script 幫 User 更換印表機

基於某些原因有時候我們要幫 User 變更印表機
比如 Printer Server 換一台了,或是租賃的影印機換一台之類的
通常對於電腦操作較熟悉的 User 用搜尋安裝就可以了 (AD 環境下有做好相關設定)
但某些人就是需要你幫忙
為了成為一位體貼 User 的 MIS,用 GPO 派送 Script 去更換印表機也是很正常的事情
以下 VBS 是非常多年以前寫的,變數的部份很偷懶就直接用兩個陣列下去自己代 Printer 進去就好
反正這種東西只是臨時性的,程式寫醜一點無所謂

設定好後可以用 GPO 設定 User 在登入時執行,Script 邏輯:
  1. 記下 User 有哪幾台
  2. 記下 User 的 Default Printer 是哪一台
  3. 刪除 Printer
  4. 新增 Printer (on New Server)
  5. 設定 Default Printer

===== 程式開始 =====

Dim PrinterToReplace
Dim PrinterReplacement
' PrinterToReplace 與 PrinterReplacement 欄位數量必須相同
' 下例: 
' "\\Printer1.Contoso.com\HPPrinter1" 更換為 "\\Printer1.Contoso.com\HPPrinter1"
' "\\Printer1.Contoso.com\HPPrinter11" 更換為 "\\Printer2.Contoso.com\HPPrinter12"

2020-06-11

Microsoft VDI 內類似 Dynamic DNS (DDNS)的功能 (Part 2)

這篇 之後重新改寫 Script

不需要用 GPO 讓 Client 跑 Logon Script 寫資料到 Share Folder
再用另一台 Server 檢查資料去更新 Record

改為單一程式放在 Server 上面跑即可 (須具備相關 Remote Management Tools)

$DomainName = "Contoso.com"
$DefaultActivedRDCBMaster = "RDCB-01.$DomainName"

2020-05-28

2020-05-22

取得 AD 中 Windows Server 作業系統的 Computer Account 與 IP 位置

取得 AD 中 Windows Server 作業系統的 Computer Account 與 IP 位置

(Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} -Property Name,OperatingSystem,OperatingSystemServicePack) | ForEach-Object {
try{
$DNS = Resolve-DnsName -Name $_.Name -ErrorAction Stop
} Catch{
}
write-host ('"' + $_.Name + '","' + $_.OperatingSystem + '","' + $_.OperatingSystemServicePack + '","' + $DNS.IPAddress + '"')
};

清除 UNC Path 的 Credential Cache

有時候我們用 \\ComputerName 的方式去連 Share Folder 並敲入帳號密碼
雖然並沒有勾選記住我的認證,這組驗證還是會被 Cache 起來方便後續連線

但常常遇到必須更改連線認證的情況,又沒有辦法從圖形介面去刪除 Cache
此時只需要以下指令:

net use * /delete


2020-05-21

自動關閉咬住 User Profile Disk (UPD) 的 Pooled VM 並還原檢查點

有時候會遇到 RDCB Database 與實際連線 (Pooled VM 配發) 不同的情況
比如 User 連上 PooledVM-001,User Profile Disk 也 mount 上了 PooledVM-001
但 RDCB DB 的 rds.session Table 卻因故沒有這筆 Record (目前不確定為什麼會這樣)
則 User 在下一次連線的時候 RDCB 可能會分配給他另一台 Pooled VM 比如 PooledVM-002
而因為 User 的 PRofile Disk 已經 mount 在 PooledVM-001 (Open File)
所以這次 User 進入 PooledVM-002 的時候就無法再掛上他的 Profile Disk

這個時候 User 已經登入的 PooledVM-002 會跟他說【無法登入你的帳號】
事實上只是 Profile Disk 無法 mount 而已
但 User 只會跟你說不能用、連不上這種令你無法理解問題是什麼的說詞
真心認為微軟應該要寫說: 請告訴你的系統管理員找不到你的 Profile
而不是只叫 User 去找系統管理員而已



為了自動解決這個問題,又要寫個自動檢查的程式來處理了
以下 PowerShell Script 要在存放 User Profile Disk 的 Server 上跑

  • 程式先檢查目前被 Open 的 Profile Disk .vhdx 檔案,根據檔名取出 User SID
  • 再與目前連線中的 RDSession 比對
  • 有連線、User Profile Disk File 也有被 Open 的就略過
  • 沒連線,但 User Profile Disk File 卻被 Open 的就進行處理
  • 找出目標 VM Host、找出 User Profile Disk 是被 mount 在哪一台 VM 上
  • 針對那台 VM 進行關機、還原的指令 (需要用到 Invoke-Command 遠端命令)

  • Updated: 2020.05.26
    • 找到 Locked User Profile Disk 後等待一分鐘再查一次兩次都查到相同記錄才進行 Unlock
      避免第一次查的時候遇到 User 正在連線中的問題

2020-05-19

使用 PowerShell 自動佈署基於 Let's Encrypt 公開憑證的 Microsoft RDS (VDI/RemoteApp) 環境


使用 Win-ACME 來更新憑證

以下 Script 基於僅有兩台 RDWeb/Gateway 色合一的 FrontEnd Server
僅做到將憑證更新完畢匯入系統,派送新的 RDCB 憑證指紋 (Thumbprints) 參考這篇文章

環境預設禁止 RDWeb/Gateway 主機主動對 Internet 連線
也禁止 Internet 對 RDWeb/Gateway 的 TCP Port 80 連線
因此開始 Renew 之前會先打開防火牆,此外也會先更新 TrustedRootCA

由於此例將 RDWeb、RDGateway、RDCB 全部都用公開憑證
所以必須要將 RDCB HA URL 的 Internet IP 也指到 RDWeb / RDGateway 這台上讓外網連線
實際上 RDCB 不需要對外,所以外網 DNS 對應哪個 IP 沒差
  • 2020.06.10 Updated
    • Script 最後將憑證指紋寫入 Thumbprint.txt 檔存放在 RDWeb 的 wwwroot
      這樣就可以另外寫一隻 Script 以 http get 的方式抓取 寫入 GPO
    • 另外,為了彌補 GPO 更新的時間差
      在憑證即將到期的 15 日內,且為周六或周日
      才執行 RDS 系統更新憑證的指令

# -----------------
# Configuration

$WACSPath = "C:\Cert\"

$WACSEXEFileName = "wacs.exe"
$PFXPath = ($WACSPath + "Cert\")
$RDWebGWURL = "Contoso.com"
$RDCBHAURL = "RDCB.Contoso.com"
$DefaultActivedRDCBMaster = "RDCB-01.Contoso.com"
$TrustedRootCAPath = ($WACSPath + "TrustedRootCA\")
$TrustedRootCAFile = "roots.sst"
$BlockIPs = @("1.0.0.0-9.255.255.255", "11.0.0.0-172.15.255.255", "172.33.0.0-192.167.255.255", "192.169.0.0-255.255.255.255")

2020-05-15

Manual Update Trusted Root CA 手動更新信任的根憑證

有些時候我們有些封閉的機器不讓他連網也不給他跑 Windows Update
但他又會跟一些非封閉的機器溝通,可能導致憑證不信任的問題

此時可以用可連網的機器下指令取得 Trusted Root CA 資料並存成一個檔案
再丟給封閉機器去匯入

指令很簡單:

非封閉可連網機器下指令
certutil.exe –generateSSTFromWU "C:\Cert\TrustedRootCA\roots.sst"

將上述指令取得的 C:\Cert\TrustedRootCA\roots.sst 檔案複製到封閉不可連網機器中
再以 Powershell 執行:
(Get-ChildItem -Path C:\Cert\TrustedRootCA\roots.sst) | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root

2020-05-14

用 Powershell 取得含 Private Key 有密碼憑證的指紋資訊 (或其他資訊)

幾種方式:

第一種 (Password 明碼)


Set-StrictMode -Version Latest

[string] $strPW  = 'password'
[string] $strPFX = 'C:\Cert\www.contoso.com.pfx'
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($strPFX,$strPW,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"DefaultKeySet")

$cert.Thumbprint

只為了 Let's Encrypy 更新憑證而開放的 TCP Port 80 全自動開關 PowerShell

Let's Encrypt 表示才不會公佈我們會用哪些 IP 來對使用者進行驗證咧! 不然我們會被攻擊!
所以我們必須要自己開關 TCP Port 80,無法針對不特定驗證來源 IP 設定白名單
以下設定僅阻擋來自 Public IP 的請求,Pirvate IP 是允許連線的


2020-05-13

Exchange 採用 Let's Encrypt 驗證時遇到 Multi CAS Role NLB 問題的處理

Exchange 扮演 CAS 腳色的機器一般都裝有兩台以上做 NLB 或 Round Robin
此時若在某一台 CAS 進行 Let's Encrypt Renew 的時候會遇到問題:

  • 建立了 .well-know 資料夾與驗證檔案
  • Let's Encrypt 來查詢卻問到別台 CAS
  • 別台 CAS 上面當然沒有 .well-know 資料夾與驗證檔案
  • 於是驗證失敗

為了解決這個問題,用了一些投機取巧、土炮的辦法
也許有更為正確的辦法,但目前沒想到或沒學到,所以就這樣做了,反正也行得通
原理很簡單,就是在開始 renew 之前先開始一個周期性的 robocopy /mir 同步每一台 CAS

採用的 Let's Encrypt ACMEv2 client 
https://www.win-acme.com/

以下是 Batch File 與 PowerShell Script

Updated: 2021.01.26
因應 Let's Encrypt 變更憑證發行單位名稱,增加變更 TLSCertificateName 的部份
Updated: 2021.07.09
如果有 Multi-Domain 且跟 Exchange Online 做 Hybrid,需要確認只有單一 TLSCertificateName
故將 TLSCertificateName 更新的部份加個參數做個判斷式,自己設定 True or False

2020-05-12

修正 Network Location Public / Private / Domain 的問題

經常發生 Domain Computer / Server 開機完畢後 Network Location 是 Public 造成 Firewall Profile 影響到連線的問題
因此寫了一個簡單的 Powershell Script 放在 GPO 讓電腦開機就去檢查一遍並進行修正
原理很簡單,先用 Get-NetConnectionProfile 查出目前的網路 Profile 是不是 Domain
如果不是 Domain 就 Restart Network Awareness Locaion 這個 Service

2020-05-08

Remote Desktop Web Service - Force to use RDGateway on [Connect to a Remote PC]

剛裝好的 Remote Desktop Service 雖然在 Deployment Properties 中 的 Gateway 項目
將 [Bypass RD Gatewat server for local addresses] 取消勾選
但如果在 Remote Desktop Web 頁面中選 [Connect to a Remote PC] 功能時
並不會使用 Remote Desktop Gateway,而是直接連線
要強制所有連線都採用 Remote Desktop Gateway 的話
需要在 IIS 中設定 .rdp 的預設值:

2020-05-06

Windows Server Manager - Remote Server response packet size exceeds the maximum envelope size

昨天將一台 Windows Server 2012 R2 原地升級 (in-place upgrade) 到 Windows Server 2019 後,在管理用 VM 的 Server Manager 中該主機的連線狀態出現了以下錯誤

Data retrieval failures occurred

Refresh failed:

Notification:
Configuration refresh failed with the following error: The WS-Management service cannot process the request. The computed response packet size exceeds the maximum envelope size that is allowed (512000).



解決方法很簡單:

2020-04-07

Add IP Subnet to RAP Managed Local Computer Groups

因為在 Microsoft VDI 攻略 這篇文末 Debug 的部份提到的【連線目標一直是 IP 沒辦法變成電腦名稱 FQDN】的問題三不五時就發生
所以決定用一些偷雞摸狗 (?) 的方式解決

在 RAP 建立一個 Manage Local Computer Group 並把 VDI Pool 的網段所有 IP 都加入
這樣總行了吧?
用圖形介面慢慢敲,敲他 253 個 IP 很累,當然要用 Powershell 來做

Powershell 指令如下:


2020-03-27

移除 Windows 7 中沒有正常移除乾淨的 Internet Explorer 11 (IE11)

事情發生在從【控制台】的【程式和功能】中【開啟或關閉 Windows 功能】將 IE 11 取消打勾後無法再重新安裝 IE 11 的情況,安裝初階段就會告訴你已經有安裝更新的版本了,不能安裝,或是跟你說重開機才能使用新的瀏覽器但是重開機後依然沒有 IE。

此時可以到【控制台】的【程式和功能】中的【解除安裝程式】找尋已經安裝的更新並將他移除,或是可以下指令:
FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /norestart"
新版 IE 在此下載
https://support.microsoft.com/zh-tw/hub/4230784/internet-explorer-help
https://support.microsoft.com/zh-tw/help/17621

2020-02-17

讓手機 Line App 用外部 Browser 開啟超連結

自從 Line App 不知哪一版改版開始有了內建瀏覽器,開什麼聯結都會用內建瀏覽器
但他的內建瀏覽器對於一些動態程式語言或 CSS 語法可能有相容性問題導致使用上會不方便
以下為讓 Line App 以外部 Browser 開啟超連結的方法
只要將超連結帶入以下 GET 參數即可

openExternalBrowser=1

如果網址本身沒有帶 GET 參數,就在最後面加上 ?openExternalBrowser=1
如果網址已經有帶 GET 參數,就在最後面加上 &openExternalBrowser=1

比如

https://www.google.com/

https://www.google.com/?openExternalBrowser=1

https://www.google.com/search?q=dino9021&openExternalBrowser=1

2020-02-12

Nintendo Switch Online 個人計畫轉家庭計畫

本篇是個人記錄購買了 Nintendo Switch Online 個人計畫 之後轉家庭計畫的折扣
詳細內容請參考 官方網站 說明

個人計畫購入資訊: 2020.01.21 晚間購入

○ご購入日時:
2020/01/21 23:16:45 (JST)
○ご購入商品:
Nintendo Switch Online 個人プラン 12か月(365日間) 利用券
○デバイスタイプ:
NINTENDO SWITCH
--------------------
お支払い合計金額:
2,400円 (内税 218円)

※購入のキャンセルや返金はできません。

最後這行字的意思是上了賊船就不可後悔,沒有取消退費這檔事