TechShizz | Tech Guides

Error: "Cannot find the Windows PowerShell data file 'ImportExportIscsiTargetConfiguration.psd1'"


While installing an iSCSI target server manager displays the error: "Cannot find the Windows PowerShell data file 'ImportExportIscsiTargetConfiguration.psd1'"


On the computer where server manager is running, go to:


COPY the en-US folder and then rename it to "en-GB".

Run the wizard again and this time there should be no error.

Setting up Failover Clustering | Server 2016 via PowerShell

Servers in this example:

DC1 - Domain Controller

FS1 - File Server for Shared Storage

Cluster-Host1 - Cluster Node

Cluster-Host2 - Cluster Node

Here is the required networking for this lab:

Production Network - | DC, FS1, Cluster-Host1, Cluster-Host2

Cluster Network - | Cluster-Host1, Cluster-Host2

Storage Network  - | FS1

First we set up the required storage, iSCSI on the file server. This will consist of the shared storage for whatever App and a Quorum disk. Both disks should be formatted as NTFS (this will be done in the powershell below. The PowerShell commands are making use of the Invoke-Command cmdlet, to enable us to run these commands from a domain joined computer with the right admin credentials. Only one of the last two commands are required, depending on if your setting up a domain based cluster or not.

NOTE: During this process in Server 2016 from a Windows 10 Machine running RSAT, I had issues using the GUI to set this up. See for details. 


## iSCSI Initiators (pre-target) ##

# start iscsi initiator service on both nodes
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-Service *iscsi* | Set-Service -StartupType Automatic -PassThru | Start-Service }

# view iscsi initiator addresses
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-InitiatorPort }

# create iscsi target portal for discovery
Invoke-Command Cluster-Host1,Cluster-Host2 { New-IscsiTargetPortal -TargetPortalAddress }

## iSCSI Target ##

# create iscsi lun
Invoke-Command FS1 { New-IscsiVirtualDisk -Path C:\DataDisk.vhdx -SizeBytes 100GB }
Invoke-Command FS1 { New-IscsiVirtualDisk -Path C:\QuorumDisk.vhdx -SizeBytes 1GB }

# create iscsi target
Invoke-Command FS1 { New-IscsiServerTarget -TargetName CL-Target -InitiatorIds "","" }

# assign luns to target
Invoke-Command FS1 { Add-IscsiVirtualDiskTargetMapping -TargetName CL-Target -Path C:\DataDisk.vhdx }
Invoke-Command FS1 { Add-IscsiVirtualDiskTargetMapping -TargetName CL-Target -Path C:\QuorumDisk.vhdx }

## iSCSI Initiators (post-target) ##

# update discovery portal with new target information
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-IscsiTargetPortal | Update-IscsiTargetPortal }

# view iscsi targetGet
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-IscsiTarget }

# connect initiators to target
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-IscsiTarget | Connect-IscsiTarget }

# force the connection to persist (across reboots)
Invoke-Command Cluster-Host1,Cluster-Host2 { Get-IscsiSession | Register-IscsiSession }

##Connect to ONE of the cluster hosts to format the disks. Repeat for each disk. Label Witnes as W and data D.

# view disks

# initialize disks as GPT
Initialize-Disk -Number 2 -PartitionStyle GPT

# view partitions

# partition an entire disk
New-Partition -DiskNumber 2 -UseMaximumSize -Driveletter D

# view volumes

# format with a file system
Format-Volume -DriveLetter I -FileSystem NTFS -AllocationUnitSize 4096 -NewFileSystemLabel "IT Data"

## Failover Clustering ##
# install failover clustering feature on both nodes
Invoke-Command Cluster-Host1,Cluster-Host2 { Install-WindowsFeature Failover-Clustering,RSAT-Clustering-PowerShell }

# run cluster validation
Test-Cluster -Node Cluster-Host1,Cluster-Host2

# create a new cluster (single domain)
New-Cluster -Name Cluster1 -Node Cluster-Host1,Cluster-Host2 -StaticAddress -IgnoreNetwork,

# create a new cluster (multi-domain/workgroup - no network name)
New-Cluster -Name Cluster1 -Node Cluster-Host1,Cluster-Host2 -StaticAddress -AdministrativeAccessPoint Dns


Data Deduplication

PowerShell Commands for handing Data Deduplication:

# install data deduplication
Install-WindowsFeature -Name FS-Data-Deduplication

# dedup evaluation tool
ddpeval U:
ddpeval I:
ddpeval V:

# enable data deduplication
Enable-DedupVolume -Volume V: -UsageType HyperV

# view and set volume-wide settings
Get-DedupVolume -Volume V: | Format-List *
Set-DedupVolume -Volume V: -MinimumFileAge 0

# manually run optimization job
Start-DedupJob -Type Optimization -Volume V: -Priority High -Memory 100 -Cores 100

# monitor running jobs

# view overall status
Get-DedupStatus | Format-List *

# view and set schedule
Set-DedupSchedule -Name ThroughputOptimization -Enabled $false

# disable deduplication
Start-DedupJob -Type Unoptimization -Volume V:


Configure a Storage Replica | Server 2016

The below PowerShell commands can be used to configure a Storage Replica.

# install storage replica feature on replication partners
Invoke-Command -ComputerName FS1,FS2 -ScriptBlock { Install-WindowsFeature -Name Storage-Replica,FS-FileServer -IncludeManagementTools -Restart }

# test out a potential partnership
Test-SRTopology -SourceComputerName FS1 -SourceVolumeName R: -SourceLogVolumeName L: `
                -DestinationComputerName FS2 -DestinationVolumeName R: -DestinationLogVolumeName L: `
                -DurationInMinutes 1 -ResultPath c:\logs -IgnorePerfTests

# create a storage replica partnership
New-SRPartnership -SourceComputerName FS1 -SourceRGName FS1RG -SourceVolumeName R: -SourceLogVolumeName L: `
                  -DestinationComputerName FS2 -DestinationRGName FS2RG -DestinationVolumeName R: -DestinationLogVolumeName L:

# view replication status
Get-WinEvent -ProviderName Microsoft-Windows-StorageReplica

# add some files to the source volume
"Hello!" > r:\file.txt
"Was it me," > r:\file2.txt
"you were looking for?" > r:\file3.txt
fsutil file createnew r:\file4.dat 1000000000

# reverse replication
Set-SRPartnership -NewSourceComputerName FS2 -SourceRGName FS2RG -DestinationComputerName FS1 -DestinationRGName FS1RG

# remove replication and clean up
Get-SRPartnership | Remove-SRPartnership

Invoke-Command -ComputerName FS1,FS2 -ScriptBlock {
    Get-SRGroup | Remove-SRGroup

Create Storage Pools, Virtual Disks and Volumes with Server Manager in Server 2012 / 2016

Here are the PowerShell Commands to complete:

# create a new storage pool
New-StoragePool -FriendlyName AllTheDisks -StorageSubSystemUniqueId (Get-StorageSubSystem).UniqueId -PhysicalDisks (Get-PhysicalDisk -CanPool $true)

# create virtual disk
New-VirtualDisk -FriendlyName CompanyData -StoragePoolFriendlyName AllTheDisks -Size 2TB -ProvisioningType Thin -ResiliencySettingName Mirror

# initialize underlying physical disks
Initialize-Disk -VirtualDisk (Get-VirtualDisk -FriendlyName CompanyData)

# partition and format volumes from virtual disk
$vd = Get-VirtualDisk -FriendlyName CompanyData | Get-Disk

$vd | 
    New-Partition -Size 100GB -Driveletter U |
            Format-Volume -FileSystem NTFS -AllocationUnitSize 4096 -NewFileSystemLabel "User Data"

$vd |     
    New-Partition -Size 500GB -Driveletter I |
        Format-Volume -FileSystem ReFS -AllocationUnitSize 4096 -NewFileSystemLabel "IT Data"

$vd | 
    New-Partition -Size 1TB -Driveletter V |
        Format-Volume -FileSystem ReFS -AllocationUnitSize 65536 -NewFileSystemLabel "VM Data"