Customize Office 365 Home installation

I just switched from Office2019 retail to Office 365 Home edition.
And we also can’t choose which office program to install, which means by default access/outlook will be installed on my computer and OneNote will not be installed.

And I checked MS document (https://support.office.com/en-us/article/product-ids-that-are-supported-by-the-office-deployment-tool-for-click-to-run-77654e77-aaeb-4ed6-84eb-1d8b0e086590), it seems we can also use Office Deployment Tool to customize Office 365 Home/Personal installation.

1, go to https://config.office.com to generate a configuration file for installation. For Office Suites, you can choose Office365 Proplus, and we’ll change it after the configuration file is generated.
2, select the Apps you want to install.
3. For the update channel, select “Monthly”
4. Answer the rest questions
5. Click export to download the XML file.
6. Open the XML file, change prodouctID from O365ProPlusRetail to O365HomePremRetail or O365PersonalRetail.
7. Download office deployment tool from https://www.microsoft.com/en-us/download/details.aspx?id=49117
8, open command line, run

setup.exe /configure Configuration_home.xml

Done!

And below are my configuration files, you can use it if you want.

<Configuration>
  <Add OfficeClientEdition="64" Channel="Monthly" ForceUpgrade="TRUE">
    <Product ID="O365HomePremRetail">
      <Language ID="en-us" />
      <ExcludeApp ID="Access" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Outlook" />
      <ExcludeApp ID="Publisher" />
    </Product>
  </Add>
  <Property Name="SharedComputerLicensing" Value="0" />
  <Property Name="PinIconsToTaskbar" Value="TRUE" />
  <Property Name="SCLCacheOverride" Value="0" />
  <Updates Enabled="TRUE" />
  <RemoveMSI />
</Configuration>

fix new iphone can’t sync with outlook.com issue

It seems Microsoft is encourage people to use the app outlook. The app is good, but I still need to sync the contact between my iphone and outlook to get my contacts number.
Spent some time to check this issue, here is the fix:


    Login to outlook.live.com
    In the browser, click on Settings icon (gear at top right) ; scroll down the Quick Settings panel and click on 'View all Outlook settings'
    In the pop-up window, select 'General'; 'Mobile Devices'
    Select the iPhone, note if you have more than one iPhone (e.g. an older device), select the 'Edit' icon (pencil) to check the details including the version, 'OK' to exit details
    Click on the 'Delete' icon (bin) to remove the device
    Power off the iPhone
    Power on the iPhone - device should attempt to re-register with Microsoft
    Open the iPhone Mail app and look for email with subject: "ACTION REQUIRED TO SYNC EMAIL" (note, this email won't appear in the online version of Outlook, only in the iPhone Mail app)
    Scroll down the message and click on: "Continue using this email app".

Can’t create tasks in Synology Active Backup for business

My Synology NAS DS1813+ is running for about 6 years, all good. I used the package “Active backup for business” to backup my AWS server data. Just config rsync and then all good to go.

The backup job was running fine for the past a few years. But I noticed that the task stopped since Christmas. When I tried to re-create the task, I got below errors:

And I also found below error message in /var/log/messages:

2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: ========== Exception Class [synoabk::exception::NotSupportACL] ==========
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: [ERROR] task.cpp:1816(24911,140290662164224) Code: [55040] What: [utility.cpp:205(24911) SYNOACLGet failed. sharePath=[/volume1/Software], synoerr=[0xD700]]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #0 (24911) /var/packages/ActiveBackup/target/webapi/../lib/libsynoabk.so.1(synoabk::exception::Exception::_setBacktrace()+0x40) [0x7f9807983800]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #1 (24911) /var/packages/ActiveBackup/target/webapi/../lib/libsynoabk.so.1(synoabk::exception::Exception::Exception<char const*, int&>(int, char const*, char const*&&, int&)+0x73) [0x7f980799e673]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #2 (24911) /var/packages/ActiveBackup/target/webapi/../lib/libsynoabk.so.1(void synoabk::exception::throwSdkError<char const (&) [12], int, int, char const*>(char const*, char const (&) [12], int&&, int&&, char const*&&)+0xb2) [0x7f98079cc8d2]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #3 (24911) /var/packages/ActiveBackup/target/webapi/../lib/libsynoabk.so.1(synoabk::set_target_share_acl(synoabk::Path const&, unsigned int)+0x139) [0x7f98079c9a79]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #4 (24911) /var/packages/ActiveBackup/target/webapi/SYNO.ActiveBackup.so(+0xfd5b0) [0x7f980539d5b0]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #5 (24911) /var/packages/ActiveBackup/target/webapi/SYNO.ActiveBackup.so(ActiveBackupHandle::TaskCreateAgentless_v1()+0x1d26) [0x7f98053a2bb6]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #6 (24911) /var/packages/ActiveBackup/target/webapi/SYNO.ActiveBackup.so(ActiveBackupHandle::Process()+0x575) [0x7f9805349415]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #7 (24911) /var/packages/ActiveBackup/target/webapi/SYNO.ActiveBackup.so(Process(SYNO::APIRequest*, SYNO::APIResponse*)+0x38) [0x7f98053d8ec8]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #8 (24911) /lib/libwebapi-DSM5.so(SYNO::APIRunner::ProcessLib(SYNO::APIRequest*, SYNO::APIResponse*)+0x1641) [0x7f98174b8f21]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #9 (24911) /lib/libwebapi-DSM5.so(SYNO::APIRunner::Process(SYNO::APIRequest*, SYNO::APIResponse*)+0x165) [0x7f98174ba145]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #10 (24911) synoscgi_SYNO.ActiveBackup.Task_1_create_agentless() [0x407c03]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #11 (24911) synoscgi_SYNO.ActiveBackup.Task_1_create_agentless() [0x407e66]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #12 (24911) /lib/libsynodaemon.so.6(synodaemon::process::ChildProc::Run()+0x5ab) [0x7f9817055a9b]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #13 (24911) /lib/libsynodaemon.so.6(synodaemon::process::ChildProc::Start()+0x24d) [0x7f981705508d]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #14 (24911) /lib/libsynodaemon.so.6(synodaemon::worker::Worker<synodaemon::process::ChildProc>::Start()+0x2e) [0x7f981705738e]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #15 (24911) /lib/libsynodaemon.so.6(synodaemon::thread::ProcessPoolMonitor::UpdateWorkerStatus(pollfd*, unsigned long)+0xcfe) [0x7f9817061a4e]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #16 (24911) /lib/libsynodaemon.so.6(synodaemon::thread::ProcessPoolMonitor::Run()+0x1f4) [0x7f9817061dc4]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #17 (24911) /lib/libsynodaemon.so.6(synodaemon::thread::Runnable::Runner(void*)+0xa) [0x7f9817062c0a]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #18 (24911) /lib/libpthread.so.0(+0x72c4) [0x7f981606f2c4]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: #19 (24911) /lib/libc.so.6(clone+0x6d) [0x7f9815dad10d]
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: (24911) [error] task.cpp:1817 TaskCreateAgentless: failed to prepare target
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: (24911) [error] synoabk::exception::Exception(HÈHכ]A\A]ÐHp좦.)
2019-02-06T13:44:31+11:00 NAS synoscgi_SYNO.ActiveBackup.Task_1_create_agentless[24911]: (24911) [error] exception: [HÈHכ]A\A]ÐHp좦.]

Tried to reinstall active backup, still the same.
After investigation, I found that this issue was caused by permission structure of my NAS share folder.
My NAS was coming with DSM 4, and after several major version upgrade, now it’s running DSM 6.2. It seems in the past DSM was using UNIX-like ACL and then from DSM 5.* it’s moved to Windows Like ACLs.
So I need to upgrade my NAS to convert share folder permission to Windows ACL:

After convert, Active backup starts working again.

Citrix always change default keyboard / input layout after login

I’m using Chinese input layout in my VDI, so usually I delete all other input layout.
And I found that every time when I login to my VDI via company’s laptop, my VDI’s default keyboard input layout will be changed to English (US), and I have to remove it again and again.

At beginning I thought it’s a windows bug, so I spent lots of time to check MS article to fix the problem…No fix…

And today I found that this issue is caused by Citrix not by Windows… Citrix introduced a new feature named “keyboard layout synchronization” in version 7.16. You can refer to below link:

https://docs.citrix.com/en-us/citrix-workspace-app-for-windows/configure.html#keyboard-layout-and-language-bar

To disable this feature,

On client: use local keyboard layout. Receiver side: select Advanced Preferences > Local keyboard layout setting > No
On VDA disable the keyboard layout sync feature.
For this open registry editor and navigate to HKLM\Software\Citrix\ICA\IcaIme
Add a new DWORD key called DisableKeyboardSync and set the value to 1 and reboot the VDA

Disable Firefox 65+ urlbar/address bar suggestion popups

According to https://bugzilla.mozilla.org/show_bug.cgi?id=1502392, browser.urlbar.autocomplete.enabled pref is no more used in Firefox 65.
So you can’t set below pref to false to disable the annoying Firefox address bar/url bar popups.

browser.urlbar.autocomplete.enabled
browser.urlbar.suggest.bookmark;false
browser.urlbar.suggest.history;false
browser.urlbar.suggest.searches

The only way to disable the popup is to use userChrome.css to control Firefox User interface.
Add below line to userChrome.css, done.

#PopupAutoCompleteRichResult {
	display: none!important;
} 

Powershell comparison: $null on the left

When I write powershell scripts, I always use below method to check whether variable is null or not.

if ($variable -eq $null) {
}

When I use VScode, VScode suggested me to put $null to left. Why?

Check below example:

$object = @(1, $null, 2, $null)

# "not safe" comparison with $null, perhaps a mistake
if ($object -eq $null) {
	# -eq gets @($null, $null) which is evaluated to $true by if
	'This is called.'
}

# safe comparison with $null
if ($null -eq $object) {
	'This is not called.'
}

So, the right way to compare is always put $null on the left side.

if ($null-eq $variable) {
}