Thursday, July 9, 2020

BitLocker cannot encrypt a drive: known issues

Error 0x80310059: BitLocker Drive Encryption is already performing an operation on this drive

When you turn on BitLocker Drive Encryption on a computer that is running Windows 10 Professional, you receive a message that resembles the following:
ERROR: An error occurred (code 0x80310059):BitLocker Drive Encryption is already performing an operation on this drive. Please complete all operations before continuing.NOTE: If the -on switch has failed to add key protectors or start encryption,you may need to call manage-bde -off before attempting -on again.

Cause

This issue may be caused by settings that are controlled by Group Policy Objects (GPOs).

Resolution

Important
Follow the steps in this section carefully. Serious problems might occur if you modify the registry incorrectly. Before you modify it, back up the registry for restoration in case problems occur.
To resolve this issue, follow these steps:
  1. Start Registry Editor, and navigate to the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE
  2. Delete the following entries:
    • OSPlatformValidation_BIOS
    • OSPlatformValidation_UEFI
    • PlatformValidation
  3. Exit Registry Editor, and turn on BitLocker Drive Encryption again.

"Access is denied" message when you try to encrypt removable drives

You have a computer that is running Windows 10, version 1709 or version 1607. You try to encrypt a USB drive by following these steps:
  1. In Windows Explorer, right-click the USB drive and select Turn on BitLocker.
  2. On the Choose how you want to unlock this drive page, select Use a password to unlock the drive.
  3. Follow the instructions on the page to enter your password.
  4. On the Are you ready to encrypt this drive? page, select Start encrypting.
  5. The Starting encryption page displays the message "Access is denied."
You receive this message on any computer that runs Windows 10 version 1709 or version 1607, when you use any USB drive.

Cause

The security descriptor of the BitLocker Drive Encryption service (BDESvc) has an incorrect entry. Instead of NT AUTHORITY\Authenticated Users, the security descriptor uses NT AUTHORITY\INTERACTIVE.
To verify that this issue has occurred, follow these steps:
  1. On an affected computer, open an elevated Command Prompt window and an elevated PowerShell window.
  2. At the command prompt, enter the following command:
    cmd
  1. C:\>sc sdshow bdesvc
    
    The output of this command resembles the following:
    D:(A;;CCDCLCSWRPWPDTLORCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLORCWDWO;;;BA)(A;;CCLCSWRPLORC;;;BU)(A;;CCLCSWRPLORC;;;AU)S:(AU;FA;CCDCLCSWRPWPDTLOSDRCWDWO;;;WD)
  2. Copy this output, and use it as part of the ConvertFrom-SddlString command in the PowerShell window, as follows.
    Output of the ConvertFrom-SddlString command, showing NT AUTHORITY\INTERACTIVE
    If you see NT AUTHORITY\INTERACTIVE (as highlighted), in the output of this command, this is the cause of the issue. Under typical conditions, the output should resemble the following:
    Output of the ConvertFrom-SddlString command, showing NT AUTHORITY\Authenticated Users
Note
GPOs that change the security descriptors of services have been known to cause this issue.

Resolution

  1. To repair the security descriptor of BDESvc, open an elevated PowerShell window and enter the following command:
    ps
  1. sc sdset bdesvc D:(A;;CCDCLCSWRPWPDTLORCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLORCWDWO;;;BA)(A;;CCLCSWRPLORC;;;BU)(A;;CCLCSWRPLORC;;;AU)S:(AU;FA;CCDCLCSWRPWPDTLOSDRCWDWO;;;WD)
    
  2. Restart the computer.

The issue should now be resolved.

Wednesday, July 8, 2020

I'm getting this error - this workbook contains links to one or more external sources that could be unsafe

As far as I know, this message is a Security Warning that Automatic update of links has been disabled.
To suppress the message and to automatically update the links when you open a workbook, follow these steps:   
  1. Click Microsoft Office File, and then click Options.
  2. Click Advanced.
  3. Under General, click to clear the Ask to update automatic links check box.
https://support.microsoft.com/en-us/kb/826921 (It also applies to Excel 2013)

Common Powershell Commands

Restart-Computer


Syntax

PowerShell
Restart-Computer
       [-WsmanAuthentication ]
       [[-ComputerName] ]
       [[-Credential]]
       [-Force]
       [-Wait]
       [-Timeout ]
       [-For ]
       [-Delay ]
       [-WhatIf]
       [-Confirm]
       []

Description

The Restart-Computer cmdlet restarts the operating system on the local and remote computers.
You can use the parameters of Restart-Computer to run the restart operations, to specify the authentication levels and alternate credentials, to limit the operations that run at the same time, and to force an immediate restart.
Starting in Windows PowerShell 3.0, you can wait for the restart to complete before you run the next command. Specify a waiting time-out and query interval, and wait for particular services to be available on the restarted computer. This feature makes it practical to use Restart-Computer in scripts and functions.

Examples

Example 1: Restart the local computer
Restart-Computer restarts the local computer.
PowerShell
Restart-Computer
Example 2: Restart multiple computers
Restart-Computer can restart remote and local computers. The ComputerName parameter accepts an array of computer names.
PowerShell
Restart-Computer -ComputerName Server01, Server02, localhost
Example 3: Get computer names from a text file
Restart-Computer gets a list of computer names from a text file and restarts the computers. The ComputerName parameter isn't specified. But because it's the first position parameter, it accepts the computer names from the text file that are sent down the pipeline.
PowerShell
Get-Content -Path C:\Domain01.txt | Restart-Computer
Get-Content uses the Path parameter to get a list of computer names from a text file, Domain01.txt. The computer names are sent down the pipeline. Restart-Computer restarts each computer.
Example 4: Force restart of computers listed in a text file
This example forces an immediate restart of the computers listed in the Domain01.txt file.
The computer names from the text file are stored in a variable. The Force parameter forces an immediate restart.
PowerShell
$Names = Get-Content -Path C:\Domain01.txt
$Creds = Get-Credential
Restart-Computer -ComputerName $Names -Credential $Creds -Force
Get-Content uses the Path parameter to get a list of computer names from a text file, Domain01.txt. The computer names are stored in the variable $Names. Get-Credential prompts you for a username and password and stores the values in the variable $Creds.
Restart-Computer uses the ComputerName and Credential parameters with their variables. The Force parameter causes an immediate restart of each computer.
Example 6: Restart a remote computer and wait for PowerShell
Restart-Computer restarts the remote computer and then waits up to 5 minutes (300 seconds)
for PowerShell to become available on the restarted computer before it continues.
PowerShell
Restart-Computer -ComputerName Server01 -Wait -For PowerShell -Timeout 300 -Delay 2
Restart-Computer uses the ComputerName parameter to specify Server01. The Wait parameter waits for the restart to finish. The For specifies that PowerShell can run commands on the remote computer. The Timeout parameter specifies a five-minute wait. The Delay parameter queries the remote computer every two seconds to determine whether it's restarted.


-------------------------------------------------------------------------------------------

Stop-Computer

Syntax

PowerShell
Stop-Computer
    [-WsmanAuthentication ]
    [[-ComputerName] ]
    [[-Credential] ]
    [-Force]
    [-WhatIf]
    [-Confirm]
    []

Description

The Stop-Computer cmdlet shuts down the local computer and remote computers.
You can use the parameters of Stop-Computer to specify the authentication levels and alternate credentials, and to force an immediate shut down.

Examples

Example 1: Shut down the local computer
This example shuts down the local computer.
PowerShell
Stop-Computer -ComputerName localhost
Example 2: Shut down two remote computers and the local computer
This example stops two remote computers and the local computer.
PowerShell
Stop-Computer -ComputerName "Server01", "Server02", "localhost"
Stop-Computer uses the ComputerName parameter to specify two remote computers and the local computer. Each computer is shut down.
Example 3: Shut down remote computers as a background job
In this example, Stop-Computer runs as a background job on two remote computers.
The background operator & runs the Stop-Computer command as a background job. For more information, see about_Operators.
PowerShell
$j = Stop-Computer -ComputerName "Server01", "Server02" &
$results = $j | Receive-Job
$results
Stop-Computer uses the ComputerName parameter to specify two remote computers. The & background operator runs the command as a background job. The job objects are stored in the $j variable.
The job objects in the $j variable are sent down the pipeline to Receive-Job, which gets the job results. The objects are stored in the $results variable. The $results variable displays the job information in the PowerShell console.
Example 4: Shut down a remote computer
This example shuts down a remote computer using specified authentication.
PowerShell
Stop-Computer -ComputerName "Server01" -WsmanAuthentication Kerberos
Stop-Computer uses the ComputerName parameter to specify the remote computer. The WsmanAuthentication parameter specifies to use Kerberos to establish a remote connection.
Example 5: Shut down computers in a domain
In this example, the commands force an immediate shut down of all computers in a specified domain.
PowerShell
$s = Get-Content -Path ./Domain01.txt
$c = Get-Credential -Credential Domain01\Admin01
Stop-Computer -ComputerName $s -Force -Credential $c
Get-Content uses the Path parameter to get a file in the current directory with the list of domain computers. The objects are stored in the $s variable.
Get-Credential uses the Credential parameter to specify the credentials of a domain administrator. The credentials are stored in the $c variable.
Stop-Computer shuts down the computers specified with the ComputerName parameter's list of computers in the $s variable. The Force parameter forces an immediate shutdown. The Credential parameter submits the credentials saved in the $c variable.

-------------------------------------------------------------------------------------------

Start-Service

Syntax

PowerShell
Start-Service
     [-InputObject] 
     [-PassThru]
     [-Include ]
     [-Exclude ]
     [-WhatIf]
     [-Confirm]
     []
PowerShell
Start-Service
     [-Name] 
     [-PassThru]
     [-Include ]
     [-Exclude ]
     [-WhatIf]
     [-Confirm]
     []
PowerShell
Start-Service
     [-PassThru]
     -DisplayName 
     [-Include ]
     [-Exclude ]
     [-WhatIf]
     [-Confirm]
     []

Description

The Start-Service cmdlet sends a start message to the Windows Service Controller for each of the specified services. If a service is already running, the message is ignored without error. You can specify the services by their service names or display names, or you can use the InputObject parameter to supply a service object that represents the services that you want to start.

Examples

Example 1: Start a service by using its name
This example starts the EventLog service on the local computer. The Name parameter identifies the service by its service name.
PowerShell
Start-Service -Name "eventlog"
Example 2: Display information without starting a service
This example shows what would occur if you started the services that have a display name that includes "remote".
PowerShell
Start-Service -DisplayName *remote* -WhatIf
The DisplayName parameter identifies the services by their display name instead of their service name. The WhatIf parameter causes the cmdlet to display what would happen when you run the command but does not make changes.
Example 3: Start a service and record the action in a text file
This example starts the Windows Management Instrumentation (WMI) service on the computer and adds a record of the action to the services.txt file.
PowerShell
$s = Get-Service wmi
Start-Service -InputObject $s -PassThru | Format-List >> services.txt
First we use Get-Service to get an object that represent the WMI service and store it in the $s variable. Next, we start the service. Without the PassThru parameter, Start-Service does not create any output. The pipeline operator (|) passes the object output by Start-Service to the Format-List cmdlet to format the object as a list of its properties. The append redirection operator (>>) redirects the output to the services.txt file. The output is added to the end of the existing file.
Example 4: Start a disabled service
This example shows how to start a service when the start type of the service is Disabled.
PowerShell
PS> Start-Service tlntsvr
Start-Service : Service 'Telnet (TlntSvr)' cannot be started due to the following error: Cannot start service TlntSvr on computer '.'.
At line:1 char:14
+ Start-Service  <<<< tlntsvr

PS> Get-CimInstance win32_service | Where-Object Name -eq "tlntsvr"
ExitCode  : 0
Name      : TlntSvr
ProcessId : 0
StartMode : Disabled
State     : Stopped
Status    : OK

PS> Set-Service tlntsvr -StartupType manual
PS> Start-Service tlntsvr
The first attempt to start the Telnet service (tlntsvr) fails. The Get-CimInstance command shows that the StartMode property of the Tlntsvr service is Disabled. The Set-Service cmdlet changes the start type to Manual. Now, we can resubmit the Start-Service command. This time, the command succeeds. To verify that the command succeeded, run Get-Service.

------------------------------------------------------------------------------------------

Start-Process

Starts one or more processes on the local computer.

Syntax

PowerShell
Start-Process
     [-FilePath] 
     [[-ArgumentList] ]
     [-Credential ]
     [-WorkingDirectory ]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError ]
     [-RedirectStandardInput ]
     [-RedirectStandardOutput ]
     [-WindowStyle ]
     [-Wait]
     [-UseNewEnvironment]
     [-WhatIf]
     [-Confirm]
     []
PowerShell
Start-Process
     [-FilePath] 
     [[-ArgumentList] ]
     [-WorkingDirectory ]
     [-PassThru]
     [-Verb ]
     [-WindowStyle ]
     [-Wait]
     [-WhatIf]
     [-Confirm]
     []

Description

The Start-Process cmdlet starts one or more processes on the local computer. By default, Start-Process creates a new process that inherits all the environment variables that are defined in the current process.
To specify the program that runs in the process, enter an executable file or script file, or a file that can be opened by using a program on the computer. If you specify a non-executable file, Start-Process starts the program that is associated with the file, similar to the Invoke-Item cmdlet.
You can use the parameters of Start-Process to specify options, such as loading a user profile, starting the process in a new window, or using alternate credentials.

Examples

Example 1: Start a process that uses default values
This example starts a process that uses the Sort.exe file in the current folder. The command uses all of the default values, including the default window style, working folder, and credentials.
PowerShell
Start-Process -FilePath "sort.exe"
Example 2: Print a text file
This example starts a process that prints the C:\PS-Test\MyFile.txt file.
PowerShell
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Example 3: Start a process to sort items to a new file
This example starts a process that sorts items in the Testsort.txt file and returns the sorted items in the Sorted.txt files. Any errors are written to the SortError.txt file.
PowerShell
Start-Process -FilePath "Sort.exe" -RedirectStandardInput "Testsort.txt" -RedirectStandardOutput "Sorted.txt" -RedirectStandardError "SortError.txt" -UseNewEnvironment
The UseNewEnvironment parameter specifies that the process runs with its own environment variables.
Example 4: Start a process in a maximized window
This example starts the Notepad.exe process. It maximizes the window and retains the window until the process completes.
PowerShell
Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized
Example 5: Start PowerShell as an administrator
This example starts PowerShell by using the Run as administrator option.
PowerShell
Start-Process -FilePath "powershell" -Verb RunAs
Example 6: Using different verbs to start a process
This example shows how to find the verbs that can be used when starting a process. The available verbs are determined by the filename extension of the file that runs in the process.
PowerShell
$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
$startExe.verbs

open
runas
runasuser
The example uses New-Object to create a System.Diagnostics.ProcessStartInfo object for PowerShell.exe, the file that runs in the PowerShell process. The Verbs property of the ProcessStartInfo object shows that you can use the Open and RunAs verbs with PowerShell.exe, or with any process that runs a .exe file.
Example 7: Specifying arguments to the process
Both commands start the Windows command interpreter, issuing a dir command on the Program Files folder. Because this foldername contains a space, the value needs surrounded with escaped quotes. Note that the first command specifies a string as ArgumentList. The second command a string array.
PowerShell
Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%systemdrive%\program files`""
--------------------------------------------------------------------------------------------

Rename-Computer

Syntax

PowerShell
Rename-Computer
      [-ComputerName ]
      [-PassThru]
      [-DomainCredential ]
      [-LocalCredential ]
      [-NewName] 
      [-Force]
      [-Restart]
      [-WsmanAuthentication ]
      [-WhatIf]
      [-Confirm]
      []

Description

The Rename-Computer cmdlet renames the local computer or a remote computer. It renames one computer in each command.
This cmdlet was introduced in Windows PowerShell 3.0.

Examples

Example 1: Rename the local computer
This command renames the local computer to Server044 and then restarts it to make the change effective.
PowerShell
Rename-Computer -NewName "Server044" -DomainCredential Domain01\Admin01 -Restart
Example 2: Rename a remote computer
This command renames the Srv01 computer to Server001. The computer is not restarted.
The DomainCredential parameter specifies the credentials of a user who has permission to rename computers in the domain.
The Force parameter suppresses the confirmation prompt.
PowerShell
Rename-Computer -ComputerName "Srv01" -NewName "Server001" -DomainCredential Domain01\Admin01 -Force
------------------------------------------------------------------------------------------