<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>azure blob Archives | XOAP</title>
	<atom:link href="https://dev.xoap.io/tag/azure-blob/feed/" rel="self" type="application/rss+xml" />
	<link>https://dev.xoap.io/tag/azure-blob/</link>
	<description>Platform for IT infrastructure and workplace automation</description>
	<lastBuildDate>Tue, 03 Feb 2026 12:20:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://dev.xoap.io/wp-content/uploads/2023/11/cropped-favicon-32x32.png</url>
	<title>azure blob Archives | XOAP</title>
	<link>https://dev.xoap.io/tag/azure-blob/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Offline Domain Join using XOAP and Azure Blob storage</title>
		<link>https://dev.xoap.io/offline-domain-join-xoap-azure-blob/</link>
		
		<dc:creator><![CDATA[Perica]]></dc:creator>
		<pubDate>Thu, 29 Feb 2024 12:27:02 +0000</pubDate>
				<category><![CDATA[Library]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[azure blob]]></category>
		<category><![CDATA[dsc]]></category>
		<category><![CDATA[xoap]]></category>
		<guid isPermaLink="false">https://dev.xoap.io/?p=8602</guid>

					<description><![CDATA[<p>Use the Offline Domain Join module to Domain Join a device that doesn't have access to the Domain Controller. Download here for free!</p>
<p>The post <a href="https://dev.xoap.io/offline-domain-join-xoap-azure-blob/">Offline Domain Join using XOAP and Azure Blob storage</a> appeared first on <a href="https://dev.xoap.io">XOAP</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="8602" class="elementor elementor-8602" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-311f07f2 e-flex e-con-boxed e-con e-parent" data-id="311f07f2" data-element_type="container" data-e-type="container" data-settings="{&quot;jet_parallax_layout_list&quot;:[]}">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6187fbc3 elementor-widget elementor-widget-text-editor" data-id="6187fbc3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Our module allows you to Domain Join a device that doesn&#8217;t have access to the Domain Controller (through the company network or via VPN). It&#8217;s an <strong>alternative</strong> to using <strong>Azure Hybrid Join</strong>.</p><p>While Azure Hybrid Join adds a device to Azure AD (Entra) and local AD, this option allows joining a device to local AD only. Meanwhile, Hybrid Join is limited regarding naming convention and only allows the defining of the prefix.</p><p>With this solution, it&#8217;s possible to define a prefix and to use a serial number of computers for the computer name.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-ce27097 elementor-widget elementor-widget-text-editor" data-id="ce27097" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h2>Who is this for?</h2>								</div>
				</div>
				<div class="elementor-element elementor-element-77fc1c9 elementor-widget elementor-widget-text-editor" data-id="77fc1c9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>You can benefit from using this module whether you&#8217;re a XOAP user or not. Here&#8217;s how:</p><p><strong>a)</strong> If you&#8217;re a XOAP user, simply set up Windows clients for use of Offline Domain Join via Azure Blob Storage using this module and XOAP console.</p><p><strong>b)</strong> If you&#8217;re not a XOAP user, use this module in your own DSC environment, or use PowerShell scripts inside this module to create their own automation alternative for Offline Domain Join.</p><p>Want to experience everything XOAP has to offer? <a href="https://auth.dev.xoap.io/auth/realms/my.dev.xoap.io/protocol/openid-connect/registrations?client_id=portal&amp;response_type=code&amp;scope=openid%20email&amp;redirect_uri=https://my.dev.xoap.io&amp;kc_locale=en&amp;_ga=2.190779107.97889014.1728977515-2092130983.1728977514" target="_blank" rel="noopener">Create your free account here</a>!</p>								</div>
				</div>
				<div class="elementor-element elementor-element-9ab7f2d elementor-widget elementor-widget-text-editor" data-id="9ab7f2d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h2>What does this module do?</h2>								</div>
				</div>
				<div class="elementor-element elementor-element-455c3f9 elementor-widget elementor-widget-text-editor" data-id="455c3f9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>To explain further, this module will rename the computer using the serial number and defined prefix. Afterwards, it&#8217;ll make an Offline Domain Join of the device via Azure Blob storage; if wanted.</p><p>The computer creates a request and posts it on a defined location on Azure Blob. Then, the Domain Controller will take that request and post a response on Azure Blob. This response file is then read by a computer – and the computer makes Offline Domain Join. Furthermore, the certificate will be imported from Azure Blob.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-414a822 elementor-widget elementor-widget-text-editor" data-id="414a822" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h2>What do I need to know before I start?</h2>								</div>
				</div>
				<div class="elementor-element elementor-element-3580c60 elementor-widget elementor-widget-text-editor" data-id="3580c60" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>To understand how to use it, knowledge of PowerShell, Active Directory and Azure Storage is needed along with these 3 components:</p><ol><li>Server-side: modify Domain Controller to allow for Offline Domain Join</li><li>Azure Blob Storage: storage to host files needed for Offline Domain Join</li><li>XOAPOfflineDomainJoinViaBlobDSC: to set up Windows client to create request and fetch the answer for Offline Domain Join</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-c51a707 elementor-widget elementor-widget-text-editor" data-id="c51a707" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3>List of prerequisites:</h3>								</div>
				</div>
				<div class="elementor-element elementor-element-cd1f4f7 elementor-widget elementor-widget-text-editor" data-id="cd1f4f7" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul type="disc"><li lang="de">AzureAZ PowerShell Module (if not installed &#8216;Az.Accounts&#8217; and &#8216;Az.Storage&#8217; submodules are going to be installed while running this DSC module);  </li><li lang="de">ComputerManagementDsc in version 8.5.0; </li><li lang="de">Azure Blob storage; </li><li lang="de">Local Active Directory; </li><li lang="de">PowerShell script that reads the request from Azure Blob Storage and sets response file and machine certificate to Azure Blob storage (example below).</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-c2b0b0f elementor-widget elementor-widget-code-highlight" data-id="c2b0b0f" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-okaidia copy-to-clipboard word-wrap">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$WarningPreference = "SilentlyContinue" $Domain = "test.local.com" $OU = "OU=Notebooks,OU=Koeln,DC=test,DC=local,DC=com"  $Tenant_ID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $Subscription_ID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $ResUsername = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" $SAccountname = 'xoapdeployments' $ContainerName = "adjoin"  $FExt = ".blb" $BlobFolder ="adblob" $RequestFolder = "request" $JoinName =""  Set-Location C:\Scripts  #SecPass.exe generetes password for Azure access $SecPassStr = cmd /c .\SecPass.exe $args 2`>`&1    $cred = New-Object System.Management.Automation.Pscredential($ResUsername, (ConvertTo-SecureString -String $SecPassStr))  $ARMA = Add-AzureRmAccount -ServicePrincipal -Credential $cred -TenantId $Tenant_ID -Subscription $Subscription_ID $ARMA  $storageContainer = Get-AzureRmStorageAccount | where {$_.StorageAccountName -eq $SAccountname} | Get-AzureStorageContainer  $ComputerFiles = $storageContainer | Get-AzureStorageBlob | where {$_.Name.Contains($RequestFolder) -and !($_.Name.Contains("flag.flg"))}  | Select-Object "Name" ,"LastModified"  # $ComputerFiles  if($ComputerFiles) {     foreach($Computerfile in $ComputerFiles) {         $JoinName = $ComputerFile.Name.Replace("/","\")         # $JoinName         $storageContainer | Remove-AzureStorageBlob -Container $ContainerName -Blob ($JoinName) -Force         $JoinName = $JoinName.SubString(8)         $ADblobfile = $Computername + ".blob" -f $computer         $BlobName = ".\" + $JoinName + $FExt         # $BlobName         $run = "djoin.exe /provision /domain {0} /MachineOU {1} /machine {2} /savefile {3} /reuse /rootcacerts" -f $Domain, $OU, $JoinName, $BlobName         # $run         Invoke-Expression $run         $StorageBlob = $BlobFolder + "\" + $JoinName + $FExt         # $Storage         $storageContainer | Set-AzureStorageBlobContent –File $BlobName -Blob $StorageBlob -Properties @{"ContentType" = "text/plain"}         $storageContainer | Remove-AzureStorageBlob -Blob ($RequestFolder + "\" + $JoinName) -Force         Remove-Item -Path $BlobName     } } Remove-AzureRmAccount -Username $ResUsername  </xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-4c87420 elementor-widget elementor-widget-text-editor" data-id="4c87420" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3>Available resources and syntax</h3>								</div>
				</div>
				<div class="elementor-element elementor-element-1b21125 elementor-widget elementor-widget-code-highlight" data-id="1b21125" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-okaidia copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>OfflineDomainJoinViaBlob [String] #ResourceName {     [DependsOn = [String[]]]     [PsDscRunAsCredential = [PSCredential]]     Tenant_ID = [String]     Subscription_ID = [String]     Username = [String]     Password = [String]     SAccountname = [String]     ContainerName = [String]     RequestFolder = [String]     BlobFolder = [String]     CertFolder = [String]     [TimeoutInMinutes = [Int32]]     [RenameComputerUsingSerial = [Boolean]]     [ComputerNamePrefix = [String]]     [RebootAfterDomainJoin = [Boolean]] }     </xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-fff0e5e elementor-widget elementor-widget-text-editor" data-id="fff0e5e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p lang="de">Saccountname  = Storage Account Name</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e7249c8 elementor-widget elementor-widget-text-editor" data-id="e7249c8" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Ready to get started? <strong>Download this module below! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f5b1.png" alt="🖱" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>								</div>
				</div>
				<div class="elementor-element elementor-element-5469ff6 elementor-widget elementor-widget-spacer" data-id="5469ff6" data-element_type="widget" data-e-type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
							<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-cac3a4c e-con-full e-flex e-con e-parent" data-id="cac3a4c" data-element_type="container" data-e-type="container" id="download" data-settings="{&quot;jet_parallax_layout_list&quot;:[]}">
		<div class="elementor-element elementor-element-5056cb4 e-flex e-con-boxed e-con e-child" data-id="5056cb4" data-element_type="container" data-e-type="container" id="download-fslogix" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;,&quot;jet_parallax_layout_list&quot;:[]}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-57f535b e-con-full e-flex e-con e-child" data-id="57f535b" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}">
				<div class="elementor-element elementor-element-e376ebc elementor-hidden-mobile elementor-widget elementor-widget-image" data-id="e376ebc" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img fetchpriority="high" decoding="async" width="996" height="1024" src="https://dev.xoap.io/wp-content/uploads/2024/01/download-996x1024.png" class="attachment-large size-large wp-image-5408" alt="Download illustration" srcset="https://dev.xoap.io/wp-content/uploads/2024/01/download-996x1024.png 996w, https://dev.xoap.io/wp-content/uploads/2024/01/download-292x300.png 292w, https://dev.xoap.io/wp-content/uploads/2024/01/download-768x790.png 768w, https://dev.xoap.io/wp-content/uploads/2024/01/download.png 1024w" sizes="(max-width: 996px) 100vw, 996px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-ddda84d e-con-full e-flex e-con e-child" data-id="ddda84d" data-element_type="container" data-e-type="container" data-settings="{&quot;jet_parallax_layout_list&quot;:[]}">
				<div class="elementor-element elementor-element-a6995ad elementor-widget elementor-widget-heading" data-id="a6995ad" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;none&quot;,&quot;_animation_tablet&quot;:&quot;fadeInDown&quot;}" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Download Offline Domain Join</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-26891d2 animated-slow elementor-widget__width-initial elementor-mobile-button-align-stretch elementor-invisible elementor-widget elementor-widget-form" data-id="26891d2" data-element_type="widget" data-e-type="widget" data-settings="{&quot;step_next_label&quot;:&quot;Next&quot;,&quot;step_previous_label&quot;:&quot;Previous&quot;,&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;step_type&quot;:&quot;number_text&quot;,&quot;step_icon_shape&quot;:&quot;circle&quot;}" data-widget_type="form.default">
				<div class="elementor-widget-container">
							<form class="elementor-form" method="post" name="Download" aria-label="Download">
			<input type="hidden" name="post_id" value="8602"/>
			<input type="hidden" name="form_id" value="26891d2"/>
			<input type="hidden" name="referer_title" value="azure blob Archives | XOAP" />

			
			<div class="elementor-form-fields-wrapper elementor-labels-">
								<div class="elementor-field-type-text elementor-field-group elementor-column elementor-field-group-field_fullname elementor-col-50">
												<label for="form-field-field_fullname" class="elementor-field-label elementor-screen-only">
								Full name							</label>
														<input size="1" type="text" name="form_fields[field_fullname]" id="form-field-field_fullname" class="elementor-field elementor-size-md  elementor-field-textual" placeholder="Full name">
											</div>
								<div class="elementor-field-type-email elementor-field-group elementor-column elementor-field-group-email elementor-col-50 elementor-field-required">
												<label for="form-field-email" class="elementor-field-label elementor-screen-only">
								Email							</label>
														<input size="1" type="email" name="form_fields[email]" id="form-field-email" class="elementor-field elementor-size-md  elementor-field-textual" placeholder="Email" required="required">
											</div>
								<div class="elementor-field-type-html elementor-field-group elementor-column elementor-field-group-field_b20a517 elementor-col-100">
					By downloading, you accept the XOAP <a href="https://dev.xoap.io/data-protection" target="_blank"> privacy policy</a> and will receive product information from us.				</div>
								<div class="elementor-field-type-recaptcha_v3 elementor-field-group elementor-column elementor-field-group-field_1eb3fa3 elementor-col-100 recaptcha_v3-bottomright">
					<div class="elementor-field" id="form-field-field_1eb3fa3"><div class="elementor-g-recaptcha" data-sitekey="6Ld61w4pAAAAAGfjGrvIDymMiqJJ6ghZ58D6BIro" data-type="v3" data-action="Form" data-badge="bottomright" data-size="invisible"></div></div>				</div>
								<div class="elementor-field-group elementor-column elementor-field-type-submit elementor-col-100 e-form__buttons">
					<button class="elementor-button elementor-size-md" type="submit">
						<span class="elementor-button-content-wrapper">
															<span class="elementor-button-icon">
									<svg aria-hidden="true" class="e-font-icon-svg e-fas-file-download" viewBox="0 0 384 512" xmlns="http://www.w3.org/2000/svg"><path d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"></path></svg>																	</span>
																						<span class="elementor-button-text">Download now</span>
													</span>
					</button>
				</div>
			</div>
		</form>
						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
				</div>
		<p>The post <a href="https://dev.xoap.io/offline-domain-join-xoap-azure-blob/">Offline Domain Join using XOAP and Azure Blob storage</a> appeared first on <a href="https://dev.xoap.io">XOAP</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
