# If there's an error in a call such as $cfg.settings.Lock(), it is important that the script stops. # Continuing while another application is also potentially modifying settings may corrupt them. $ErrorActionPreference = "Stop" # The PowerShell instance executing this script needs to run elevated, as administrator, to access SSH Server settings. $cfg = new-object -com "Bitvise.BssCfg" # Settings must be locked while undergoing change to preserve their integrity. # If you lock settings and do not unlock them, no other process will be able to edit settings until the object is released. $cfg.settings.Lock() try { $cfg.settings.Load() # Find a virtual account named "Test" (case insensitive), and import into its entry the public key in C:\Path\To\Key.pub. foreach ($account in $cfg.settings.access.virtAccounts.AllWhere1("virtAccount eq ?", "Test")) { $account.auth.keys.ImportFromFile("C:\Path\To\Key.pub") } $cfg.settings.Save() } finally { $cfg.settings.Unlock() }