分類: Computer Science

Citrix按鈕選單位移/一半黑畫面

Citrix按鈕選單位移/一半黑畫面

這是我們公司在使用Citirx跑應用程式的時候發現的問題。
通常症狀會是,想點選的按鈕點不到,往旁邊一點卻又點得出來。
或著是,雙螢幕的時候,拖到另外一個螢幕變成有一半畫面是黑的。
通常這種原因大部分都是雙螢幕或是有調整過螢幕縮放(DPI)

碰到這種狀況,只能讓CW1強制調回原生解析度和原生的DPI,但又不需動到系統本身的DPI。
到通知列找Citrix Receiver 右鍵 Advanced Preferences > High DPI(高DPI)
選擇第二項:No,use the native resolution(使用原生解析度)

如此一來,執行Citrix的程式時,就會用原生的100%的畫面來執行。

Please follow and like us:
Powershell : 印表機服務重啟

Powershell : 印表機服務重啟

有些時候,要排除印表機的問題,例如:無法列印、列印工作卡住。
下面的Script需要有管理員權限,他會停止列印服務,清除列印中的工作,然後啟用列印服務。


1
2
3
Stop-Service -Name Spooler -Force
Remove-Item -Path "$env:SystemRoot\System32\spool\PRINTERS\*.*"
Start-Service -Name Spooler
Please follow and like us:
讀取資料夾權限並列表為CSV

讀取資料夾權限並列表為CSV

經歷過很多年代的檔案伺服器是最不容易管理的。
尤其裡面很多資料夾有的有繼承權限有的沒有,一個一個進去點開來看十分痛苦也浪費時間。所幸透過Powershell可以一次把Folder下面所有的資料夾全權一次蒐集出來匯出的CSV,這樣就可以透過Excel來打開看了。
當然Excel有資料筆數限制,所以如果大到打不開請勤勞一點拆分子資料夾蒐集。

下面是Powershell程式碼:請自行替換變數$path和$reportpath


1
2
3
4
$path = "F:\XXXX\AA" #define path to the shared folder
$reportpath ="F:\temp\XXXX_AA_ACL.csv" #define path to export permissions report
#script scans for directories under shared folder and gets acl(permissions) for all of them
dir -Recurse $path | where { $_.PsIsContainer } | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru }} | Export-Csv $reportpath

下面就會列出資料夾下所有的ACL,這樣是不是很方便稽核呢!

Please follow and like us:
Powershell:與Batch讀取txt檔內容作為變數

Powershell:與Batch讀取txt檔內容作為變數

如果你寫了很多Powershell或批次檔是放在Fileserver/ShareFolder給大家用,
那麼FileServer搬家對你來說肯定是個痛苦,因為如果當初你的路徑是寫死的,髂麼肯定是很痛苦的。

最早,我都是在Powershell/Batch檔頭做變數宣告,例如:


1
2
3
Dos command / Batch
%Srv_A% = \\1.2.3.4
%Srv_B% = \\5.6.7.8

1
2
3
Powershell
$Srv_A = \\1.2.3.4
$Srv_B = \\5.6.7.8

但是如果這類的Script越來越多,某一天Share Folder搬家的時候也是改得很痛苦。所以我就萌生了如何可以一次改好的方式。把路徑的變數放在某個TXT檔案,需要的時候去讀出來就好了。

下面是文字檔的部分,我自己命名為GlobalVar.txt


1
2
FSRV_A=\\1.2.3.4
FSRV_B=\\5.6.7.8

Dos Command / Batch讀取方式,在檔頭放這一行利用 %~dp0的方式來讀取同目錄的txt檔案


1
for /f "delims== tokens=1,2" %%G in (%~dp0GlobalVar.txt) do set %%G=%%H

Powershell讀取方式,在檔頭放這一行,利用$PSScriptRoot來讀取同目錄txt檔案。


1
2
3
4
Get-Content $PSScriptRoot\GlobalVar.txt | Foreach-Object{
   $var = $_.Split('=')
   New-Variable -Name $var[0] -Value $var[1]
}

如果你沒有把Script放的太多目錄,這樣應該可以減少你Share Folder搬家時的困擾。

Please follow and like us:
Excel關閉時,沒有提示存檔直接關閉。

Excel關閉時,沒有提示存檔直接關閉。

這一題幾乎沒甚麼技術性,只是提供方向去解決問題。

當Excel檔編輯完要關閉的時候應該都會自動檢查是否需要存檔,但是某一天開始,突然Excel關閉的時候不存檔也不提示了,這對於User真的很惱人!

你可以先嘗試使用Excel的安全模式來打開Excel隨意編輯後關掉試試看會不會存檔。
Tips:Excel安全模式:執行Excel.exe /safemode ,或是按住Ctrl再點Excel也可以

如果會出現存檔那就是Excel某個Add-in(增益集)再作怪,試著把增益集關閉或移除後,很有機會讓這個功能恢復正常。

Please follow and like us:
Powershell : Run as Administrator from command.

Powershell : Run as Administrator from command.

如果你想要從Command(命令提示字元)直接執行Powershell然後使用管理員模式,你必須使用下列方式執行Command (命令提示字元) 。

下方的命令是打在Dos Command裡。


1
Powershell -Command Start-Process powershell -ArgumentList '-File C:\ABC.ps1' -Verb runAs

原理上是透過命提示字元(一般身分)先呼叫Powershell.exe(一般身分)去執行Powershell(管理員身分)來跑 ABC.PS1程序
圖解大概是這樣子:
Command > Powershell.exe > Powershell – file ABC.ps1

以前搞不懂怎麼弄的時候常常要用一個Bat + PS1 + PS1(Admin)三個檔案來湊成一組功能,也比較不好維護,現在這方式可以把中繼的PS1拿掉,只要Bat+PS1(Admin)就可以完成任務了。

Please follow and like us:
PowerShell : 印表機管理(增/刪/設定)

PowerShell : 印表機管理(增/刪/設定)

在以前的批次檔年代,實在太難利用它來做印表機的管理了。
有了PowerShell,想一次利用PS來大量佈署重複的印表機,或是一次想增刪多部印表機真的方便又快速。在這裡稍微說明一下。

印表機的安裝大致上分成:驅動程式>Port>印表機。
利用PowerShell新增印表機,一定要按照上面的順序做
pnputil.exe – 驅動程式
Add-PrinterDriver – 驅動程式
Add-PrinterPort – Port
Add-Printer – 印表機
所以,在辦公室要用指令安裝印表機大致上會非常兩種
1.透過印表機伺服器來安裝/列印
2.電腦直連印表機(USB/Ethernet)

無論你是透過哪一種方式使用印表機,你想用PS來新增印表機之前,你的電腦都必要先有驅動程式。它分為兩階段。我以HP Universal Printing PCL 6 為例
Driver Name必須要一字不差用””包起來。Driver可以從印表機的伺服器內印表機的伺服器內容裡看到。(前提是你要有裝過)

要新增Driver分兩階段。
第一階段是把印表機驅動新增到Windows Driver Store裡面。用的是pnputil.exe 的程式。後面下參數/add-driver和驅動程式路徑、/install,即可新增並安裝。


1
pnputil /add-driver "D:\Tools\HPUPD6.6.5\pcl6-x64-6.6.5.23510\*.inf" /install

第二階段是把剛剛新增驅動程式新增到印表機的伺服器驅動程式裡方便使用


1
Add-PrinterDriver -Name "HP Universal Printing PCL 6 (v6.6.5)"

驅動程式作業完成之後,就可以來新增印表機了。
如前述,先講第一種透過印表機伺服器的方式來安裝印表機
直接使用Add-Printer 加上ConnectionName即可。如果Server上的驅動和你已經安裝過的驅動相同就會直接套用你現有的。


1
Add-Printer -ConnectionName "\\10.0.0.1\HPLaserJet C300DN"

如果有錯誤找不到驅動,請自行加上 -DriverName參數


1
Add-Printer -ConnectionName "\\10.0.0.1\HPLaserJet M607" -DriverName "HP Universal Printing PCL 6 (v6.6.5)"

這種效果就如同你透過網路找到印表機伺服器之後直接點兩下來安裝印表機

再來就是透過Local Port或是TCP/IP的方式來安裝印表機。這種則必須先建立好PrinterPort再新增印表機,Add-PrinterPort需要Name參數指定名稱,-PrinterHostAddress指定印表機IP位址是直連印表機的。


1
Add-PrinterPort -Name "ABC001" -PrinterHostAddress "10.0.0.10"

再來就是利用Add-Printer來新增印表機,使用Name印表機名稱、PortName指定剛剛新增的Port、DriverName指定前面剛剛新增的驅動程式、Comment則可有可無,裡面可以放註解說明


1
Add-Printer -Name "HP LaserJet M607" -PortName ABC001 -DriverName "HP Universal Printing PCL 6 (v6.6.5)" -Comment "ABC001"

如此一來就可以透過PowerShell來一次新增很多印表機(例如Server上)

不過如果你有指定印表機的紙匣/顏色/紙張Size還是必須透過圖形介面去調整。
我猜測也可以透過變更機碼方式來直接修改,不過那個比較複雜下次再研究吧!

如果印表機變更IP,也很容易可以快速替換。首先要確定印表機沒有列印工作正在執行。依照下面的順序來執行,新增Printer Port,修改Printer裡面PrinterPort的設定,然後把舊的PrinterPort移除。


1
2
3
Add-PrinterPort -Name XYZ001 -PrintHostAddress "10.0.0.100"
Set-Printer -Name "HP LaserJet M607" -PortName XYZ001
Remove-PrinterPort -Name ABC001

最後是移除印表機的部分,順序與安裝印表機相反。
如果是移除連線到透過伺服器的連線的印表機下面的方式就可以直接移除。


1
Remove-Printer -Name \\10.0.0.1\ABC001

如果想連驅動程式一併移除 。執行下面的也可一併移除


1
Remove-PrinterDriver -Name "HP Universal Printing PCL 6 (v6.6.5)"

再來是說明移除直連的印表機
想移除的很乾淨,就是先移除Printer,移除PrinterPort,移除印表機驅動程式


1
2
3
Remove-Printer -Name "HP LaserJet M607"
Remove-PrinterPort -Name XYZ001
Remove-PrinterDriver -Name "HP Universal Printing PCL 6 (v6.6.5)"

最後說明,可以透過下面指令查詢目前的狀態


1
2
3
Get-Printer #查詢目前印表機
Get-PrinterPort #查詢所有安裝的印表機Port
Get-PrinterDriver #查詢所安裝的印表機驅動程式
Please follow and like us:
Adobe Reader DC找不到預設Mail Client

Adobe Reader DC找不到預設Mail Client

某些情況下Adobe Reader DC 會找不到預設的郵件程式,例如:Microsoft Outlook之類的。

此時,需要系統的預設程式裡去重新Apply一次設定
以Windows 10為範例,到設定裡去找依應用程式設定預設值

先點Set this program as default,然後再點Choose defaults for this progeam

1809前的Windows畫面

確認都有打勾,按Save

1903後的Windows確認每個功能都有選到預測的郵件應用程式

然後回頭來Adobe Reader DC設定裡面就可以看到預設郵件程式出現在裡面了

這樣有某些PDF會用到Javascript呼叫預設郵件程式寄信的時候就不會發生錯誤了。

Please follow and like us: