diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000000..70fff86268c3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,8 @@
+# Set default behaviour, in case users don't have core.autocrlf set.
+* text=auto
+
+*.sln text eol=crlf
+*.cs text eol=crlf
+*.csproj text eol=crlf
+*.ps1 text eol=crlf
+build.proj text eol=crlf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..ac45c755c73f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,194 @@
+# Azure PowerShell specific
+src/Publish/
+src/Package/
+
+obj
+TestResults
+*.orig
+*.ncrunchsolution
+*.patch
+msbuild.log
+
+# app.config is not useful for PowerShell.
+# please do not commit any app.config files.
+app.config
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+build/
+bld/
+src/*/[Bb]in/
+[Oo]bj/
+
+# Roslyn cache directories
+*.ide/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+#NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding addin-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+## TODO: Comment the next line if you want to checkin your
+## web deploy settings but do note that will include unencrypted
+## passwords
+*.pubxml
+
+# NuGet Packages Directory
+packages/
+## TODO: If the tool you use requires repositories.config
+## uncomment the next line
+#!packages/repositories.config
+
+# Enable "build/" folder in the NuGet Packages folder since
+# NuGet packages use it for MSBuild targets.
+# This line needs to be after the ignore of the build folder
+# (and the packages folder if the line above has been uncommented)
+!packages/build/
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+node_modules/
+.pshproj
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
diff --git a/AzurePowershell.Test.targets b/AzurePowershell.Test.targets
new file mode 100644
index 000000000000..f31479edbba2
--- /dev/null
+++ b/AzurePowershell.Test.targets
@@ -0,0 +1,264 @@
+
+
+
+ .\src\Local.testsettings
+ .\src\Local.x64.testsettings
+ .\src\Common\Commands.ScenarioTest\bin\Debug\Microsoft.WindowsAzure.Commands.ScenarioTest.dll
+ .\src\Common\Commands.Common.Test\bin\Debug\Microsoft.WindowsAzure.Commands.Common.Test.dll
+ .\src\ResourceManager\Sql\Commands.Sql.Test\bin\Debug\Microsoft.Azure.Commands.Sql.Test.dll
+ .\src\AzureRT.testsettings
+ .\src\ServiceManagement\Compute\Commands.ServiceManagement.Test\bin\Debug\Microsoft.WindowsAzure.Commands.ServiceManagement.Test.dll
+ src\ServiceManagement\Storage\Commands.Storage.ScenarioTest\bin\Debug\CLITest.dll
+ .\src\ServiceManagement\Services\Commands.Test\bin\Debug\Microsoft.WindowsAzure.Commands.Test.dll
+ .\src\ResourceManager\Resources\Commands.Resources.Test\bin\Debug\Microsoft.Azure.Commands.Resources.Test.dll
+ .\src\ResourceManager\DataFactories\Commands.DataFactories.Test\bin\Debug\Microsoft.Azure.Commands.DataFactories.Test.dll
+ .\src\ResourceManager\Batch\Commands.Batch.Test\bin\Debug\Microsoft.Azure.Commands.Batch.Test.dll
+ .\src\ServiceManagement\Compute\Commands.ServiceManagement.Test\bin\Debug\Microsoft.WindowsAzure.Commands.ServiceManagement.Test.dll
+ .\src\ServiceManagement\Compute\Commands.ServiceManagement.Extensions.Test\bin\Debug\Microsoft.WindowsAzure.Commands.ServiceManagement.Extensions.Test.dll
+ .\src\ServiceManagement\Sql\Commands.SqlDatabase.Test\bin\Debug\Microsoft.WindowsAzure.Commands.SqlDatabase.Test.dll
+ .\src\ServiceManagement\HDInsight\Commands.HDInsight.Test\bin\Debug\Microsoft.WindowsAzure.Commands.HDInsight.Test.dll
+ .\src\ServiceManagement\Storage\Commands.Storage.Test\bin\Debug\Microsoft.WindowsAzure.Commands.Storage.Test.dll
+ "!Functional&!Scenario&!AzureRTScenario&!Sequential&!PIRTest&!Preview&!ADDomain"
+ All
+ "OneSDK&CIT"
+ "Functional|AzureRTScenario"
+ "Functional|AzureRTScenario|Preview"
+ "Functional|AzureRTScenario|Sequential"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ManagedCacheTestAssembly>.\src\ServiceManagement\ManagedCache\Commands.ManagedCache.Test\bin\Debug\Microsoft.Azure.Commands.ManagedCache.Test.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_RecoveryServicesTestAssembly>.\src\ServiceManagement\RecoveryServices\Commands.RecoveryServices.Test\bin\Debug\Microsoft.Azure.Commands.RecoveryServices.Test.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000000..2ad45a5f6ad6
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,5 @@
+# Contribute Code or Provide Feedback
+
+If you would like to become an active contributor to this project please follow the instructions provided in [Microsoft Azure Projects Contribution Guidelines](http://windowsazure.github.com/guidelines.html).
+
+If you encounter any bugs with Microsoft Azure PowerShell please file an issue in the [Issues](https://github.com/WindowsAzure/azure-sdk-tools/issues) section of the project.
\ No newline at end of file
diff --git a/ChangeLog.txt b/ChangeLog.txt
new file mode 100644
index 000000000000..de13e504ae51
--- /dev/null
+++ b/ChangeLog.txt
@@ -0,0 +1,788 @@
+2014.11.14 Version 0.8.11
+* Profile
+ * Clear-AzureProfile: remove all subscription and credential data from the user store
+ * Select-AzureSubscription: fixed output types in default and PassThru mode
+* Compute
+ * Get-AzureVMSqlServerExtension
+ * New-AzureVMSqlServerExtension
+ * Set-AzureVMSqlServerExtension
+ * Remove-AzureVMSqlServerExtension
+* HDInsight
+ * New cmdlets
+ * Add-AzureHDInisghtScriptAction
+ * Set-AzureHDInsightClusterSize
+ * Changed cmdlets
+ *Added ConfigActions parameter
+* Managed Cache
+ * Get-AzureManagedCacheNamedCache
+ * New-AzureManagedCacheNamedCache
+ * Set-AzureManagedCacheNamedCache
+ * Remove-AzureManagedCacheNamedCache
+* Websites
+ * Fixes for webjobs and site creation
+ * Additional settings for Publish-AzureWebsiteProject cmdlet
+ * Enable use of SAS URLs in ApplicationDiagnostics storage
+* Sql Database (AzureResourceManager)
+ * New cmdlets to manage direct access to Sql databases:
+ * Enable-AzureSqlDatabaseDirectAccess
+ * Disable-AzureSqlDatabaseDirectAccess
+ * Enable-AzureSqlDatabaseServerDirectAccess
+ * Enable-AzureSqlDatabaseServerDirectAccess
+ * Rename previous cmdlets to use the term audit policy instead of audit setting
+ * Get-AzureSqlDatabaseAuditingPolicy
+ * Set-AzureSqlDatabaseAuditingPolicy
+ * Get-AzureSqlDatabaseServerAuditingPolicy
+ * Set-AzureSqlDatabaseServerAuditingPolicy
+ * Remove-AzureSqlDatabaseAuditing
+ * Remove-AzureSqlDatabaseServerAuditing
+ * Use-AzureSqlDatabaseServerAuditingPolicy
+ * Allow users to define which storage account key (Primary or Secondary) to use when defining audit policy, using the “StorageKeyType” parameter.
+
+2014.10.27 Version 0.8.10
+* Azure Data Factory cmdlets in AzureResourceManager mode
+ * New-AzureDataFactory
+ * New-AzureDataFactoryGateway
+ * New-AzureDataFactoryGatewayKey
+ * New-AzureDataFactoryHub
+ * New-AzureDataFactoryLinkedService
+ * New-AzureDataFactoryPipeline
+ * New-AzureDataFactoryTable
+ * New-AzureDataFactoryEncryptValue
+ * Get-AzureDataFactory
+ * Get-AzureDataFactoryGateway
+ * Get-AzureDataFactoryHub
+ * Get-AzureDataFactoryLinkedService
+ * Get-AzureDataFactoryPipeline
+ * Get-AzureDataFactoryRun
+ * Get-AzureDataFactorySlice
+ * Get-AzureDataFactoryTable
+ * Remove-AzureDataFactory
+ * Remove-AzureDataFactoryGateway
+ * Remove-AzureDataFactoryHub
+ * Remove-AzureDataFactoryLinkedService
+ * Remove-AzureDataFactoryPipeline
+ * Remove-AzureDataFactoryTable
+ * Resume-AzureDataFactoryPipeline
+ * Save-AzureDataFactoryLog
+ * Set-AzureDataFactoryGateway
+ * Set-AzureDataFactoryPipelineActivePeriod
+ * Set-AzureDataFactorySliceStatus
+ * Suspend-AzureDataFactoryPipeline
+* Azure Batch cmdlets in AzureResourceManager mode
+ * Set-AzureBatchAccount
+ * Remove-AzureBatchAccount
+ * New-AzureBatchAccountKey
+ * New-AzureBatchAccount
+ * Get-AzureBatchAccountKeys
+ * Get-AzureBatchAccount
+* Azure Network
+ * Multi NIC support
+ * Add-AzureNetworkInterfaceConfig
+ * Get-AzureNetworkInterfaceConfig
+ * Remove-AzureNetworkInterfaceConfig
+ * Set-AzureNetworkInterfaceConfig
+ * Security group support
+ * Set-AzureNetworkSecurityGroupToSubnet
+ * Set-AzureNetworkSecurityGroupConfig
+ * Remove-AzureNetworkSecurityGroupFromSubnet
+ * Remove-AzureNetworkSecurityGroupConfig
+ * Remove-AzureNetworkSecurityGroup
+ * New-AzureNetworkSecurityGroup
+ * Get-AzureNetworkSecurityGroupForSubnet
+ * Get-AzureNetworkSecurityGroupConfig
+ * Get-AzureNetworkSecurityGroup
+* Azure Virtual Machine
+ * Added Add PublicConfigKey and PrivateConfigKey parameters to SetAzureVMExtension
+* Azure Website
+ * Set-AzureWebsite exposes new parameters and Get-AzureWebsite returns them
+ * SlotStickyConnectionStringNames – connection string names not to be moved during swap operation
+ * SlotStickyAppSettingNames – application settings names not to be moved during swap operation
+ * AutoSwapSlotName – slot name to swap automatically with after successful deployment
+* Recovery Services
+ * Import & view vault settings
+ * Import-AzureSiteRecoveryVaultSettingsFile
+ * Get-AzureSiteRecoveryVaultSettings
+ * Enumerate Servers, Protection Containers, Protection Entities
+ * Get-AzureSiteRecoveryServer
+ * Get-AzureSiteRecoveryProtectionContainer
+ * Get-AzureSiteRecoveryProtectionEntity
+ * Get-AzureSiteRecoveryVM
+ * Manage Azure Site Recovery Operations
+ * Get-AzureSiteRecoveryJob
+ * Restart-AzureSiteRecoveryJob
+ * Resume-AzureSiteRecoveryJob
+ * Stop-AzureSiteRecoveryJob
+ * Manage Recovery Plan
+ * New-AzureSiteRecoveryRecoveryPlan
+ * Get-AzureSiteRecoveryRecoveryPlanFile
+ * Get-AzureSiteRecoveryRecoveryPlan
+ * Remove-AzureSiteRecoveryRecoveryPlan
+ * Update-AzureSiteRecoveryRecoveryPlan
+ * Protection and Failover Operations
+ * Set-AzureSiteRecoveryProtectionEntity
+ * Start-AzureSiteRecoveryCommitFailoverJob
+ * Start-AzureSiteRecoveryPlannedFailoverJob
+ * Start-AzureSiteRecoveryTestFailoverJob
+ * Start-AzureSiteRecoveryUnplannedFailoverJob
+ * Update-AzureSiteRecoveryProtectionDirection
+
+2014.10.03 Version 0.8.9
+* Redis Cache cmdlets in AzureResourceManager mode
+ * New-AzureRedisCache
+ * Get-AzureRedisCache
+ * Set-AzureRedisCache
+ * Remove-AzureRedisCache
+ * New-AzureRedisCacheKey
+ * Get-AzureRedisCacheKey
+* Fixed Remove-AzureDataDisk regression
+* Fixed cloud service cmdlets to work with the latest Azure authoring tools
+* Fixed Get-AzureSubscription -ExtendedDetails regression
+* Added -CreateACSNamespace parameter to New-AzureSBNamespace cmdlet
+
+2014.09.10 Version 0.8.8
+* Role-based access control support
+ * Query role definition
+ * Get-AzureRoleDefinition
+ * Manage role assignment
+ * New-AzureRoleAssignment
+ * Get-AzureRoleAssignment
+ * Remove-AzureRoleAssignment
+ * Query Active Directory object
+ * Get-AzureADUser
+ * Get-AzureADGroup
+ * Get-AzureADGroupMember
+ * Get-AzureADServicePrincipal
+ * Show user's permissions on
+ * Get-AzureResourceGroup
+ * Get-AzureResource
+* Active Directory service principal login support in Azure Resource Manager mode
+ * Add-AzureAccount -Credential -ServicePrincipal -Tenant
+* SQL Database auditing support in Azure Resource Manager mode
+ * Use-AzureSqlServerAuditingSetting
+ * Set-AzureSqlServerAuditingSetting
+ * Set-AzureSqlDatabaseAuditingSetting
+ * Get-AzureSqlServerAuditingSetting
+ * Get-AzureSqlDatabaseAuditingSetting
+ * Disable-AzureSqlServerAuditing
+ * Disable-AzureSqlDatabaseAuditing
+* Other improvements
+ * Virtual Machine DSC extension supports PSCredential as configuration argument
+ * Virtual Machine Antimalware extension supports native JSON configuration
+ * Storage supports creating storage account with different geo-redundant options
+ * Traffic Manager supports nesting of profiles
+ * Website supports configuring x32/x64 worker process
+ * -Detail parameter on Get-AzureResourceGroup to improve performance
+ * Major refactoring around account and subscription management
+
+2014.08.22 Version 0.8.7.1
+* AzureResourceManager
+ * Update Gallery and Monitoring management clients to fix Gallery commands
+*HDInsight
+ * Update Microsoft.Net API for Hadoop
+
+2014.08.18 Version 0.8.7
+* Update Newtonsoft.Json dependency to 6.0.4
+* Compute
+ * Windows Azure Diagnostics (WAD) Version 1.2: extension cmdlets for Iaas And PaaS
+ * Set-AzureVMDiagnosticsExtension
+ * Get-AzureVMDiagnosticsExtension
+ * Set-AzureServiceDiagnosticsExtension
+ * Get-AzureServiceDiagnosticsExtension
+ * Get-AzureDeployment: added CreatedTime and LastModifiedTime to output
+ * Get-AzureVM: added Hostname property
+ * Implemented CustomData support for Azure VMs
+* Websites
+ * Added RoutingRules parameter to Set-AzureWebsite to expose Testing in Production (TiP) and returned from Get-AzureWebsite
+ * Get-AzureWebsiteMetric to return web site metrics
+ * Get-AzureWebHostingPlan
+ * Get-AzureWebHostingPlanMetric to return metrics for the servers in the web hosting plan
+* SQL Database
+ * Get-AzureSqlRecoverableDatabase parameter simplification and return type changes
+ * Set-AzureSqlDatabaseRecovery parameter and return type changes
+* HDInsight
+ * Added support for provisioning of HBase clusters into Virtual Networks.
+
+2014.08.04 Version 0.8.6
+* Non-interactive login support for Microsoft Organizational account with ``Add-AzureAccount -Credential``
+* Upgrade cloud service cmdlets dependencies to Azure SDK 2.4
+* Compute
+ * PowerShell DSC VM extension
+ * Get-AzureVMDscExtension
+ * Remove-AzureVMDscExtension
+ * Set-AzureVMDscExtension
+ * Publish-AzureVMDscConfiguration
+ * Added CompanyName and SupportedOS parameters to Publish-AzurePlatformExtension
+ * New-AzureVM will display a warning instead of an error when the service already exists in the same subscription
+ * Added Version parameter to generic service extension cmdlets
+ * Changed the ShowInGUI parameter to DoNotShowInGUI in Update-AzureVMImage
+* SQL Database
+ * Added OfflineSecondary parameter to Start-AzureSqlDatabaseCopy
+ * Database copy cmdlets will return 2 more properties: IsOfflineSecondary and IsTerminationAllowed
+* Windows Azure Pack
+ * New-WAPackCloudService
+ * Get-WAPackCloudService
+ * Remove-WAPackCloudService
+ * New-WAPackVMRole
+ * Get-WAPackVMRole
+ * Set-WAPackVMRole
+ * Remove-WAPackVMRole
+ * New-WAPackVNet
+ * Remove-WAPackVNet
+ * New-WAPackVMSubnet
+ * Get-WAPackVMSubnet
+ * Remove-WAPackVMSubnet
+ * New-WAPackStaticIPAddressPool
+ * Get-WAPackStaticIPAddressPool
+ * Remove-WAPackStaticIPAddressPool
+ * Get-WAPackLogicalNetwork
+
+2014.07.16 Version 0.8.5
+* Upgrade .NET dependency to .NET 4.5
+* Azure File Service
+ * Get-AzureStorageFile
+ * Remove-AzureStorageFile
+ * Get-AzureStorageFileContent
+ * Set-AzureStorageFileContent
+* Azure Resource Manager tags in AzureResourceManager mode
+ * New-AzureTag
+ * Get-AzureTag
+ * Remove-AzureTag
+ * Tag parameter in New-AzureResourceGroup, Set-AzureResourceGroup, New-AzureResource and Set-AzureResource
+ * Tag parameter in Get-AzureResourceGroup and Get-AzureResource
+* Compute
+ * ReverseDnsFqdn parameter in New-AzureService, Set-AzureService, New-AzureVM and New-AzureQuickVM
+* Network
+ * Set-AzureInternalLoadBalancer
+ * Add-AzureDns
+ * Set-AzureDns
+ * Remove-AzureDns
+ * Added IdealTimeoutInMinutes parameter to Set-AzurePublicIP, Add-AzureEndpoint and Set-AzureLoadBalancedEndpoint
+
+2014.06.30 Version 0.8.4
+* Compute
+ * New-AzurePlatformExtensionCertificateConfig
+ * New-AzurePlatformExtensionEndpointConfigSet
+ * New-AzurePlatformExtensionLocalResourceConfigSet
+ * Publish-AzurePlatformExtension
+ * Remove-AzurePlatformExtensionEndpoint
+ * Remove-AzurePlatformExtensionLocalResource
+ * Set-AzurePlatformExtension
+ * Set-AzurePlatformExtensionEndpoint
+ * Set-AzurePlatformExtensionLocalResource
+ * Unpublish-AzurePlatformExtension
+* Antimalware
+ * Get-AzureVMMicrosoftAntimalwareExtension
+ * Set-AzureVMMicrosoftAntimalwareExtension
+ * Improve the cmdlets to use AzureStorageContext instead of flat storage parameters
+* Networking
+ * Enabling New-AzureVnetGateway to create dynamic gateways
+ * Added alias New-AzureDns to New-AzureDnsConfig
+* Scheduler
+ * New-AzureSchedulerJobCollection
+ * Set-AzureSchedulerJobCollection
+
+2014.05.29 Version 0.8.3
+* Restructured source code and installation folder
+* Web Site
+ * Return instances info from Get-AzureWebsite
+ * Added "Slot1" and "Slot2" parameters to enable swap between any 2 slots
+* Traffic Manager
+ * Support for Weighted Round Robin policies
+ * Support for Performance policies with external endpoints
+* Update Get-AzureRoleSize, Get-AzureAffinityGroup, Get-AzureService, Get-AzureLocation cmdlets with role sizes info
+* New "ClusterType" parameter for HDInsight
+
+2014.05.12 Version 0.8.2
+* Compute and Network improvements
+ * Public IP support
+ * Set-AzurePublicIP
+ * Get-AzurePublicIP
+ * Remove-AzurePublicIP
+ * Reserved IP support
+ * New-AzureReservedIP
+ * Get-AzureReservedIP
+ * Remove-AzureReservedIP
+ * Internal load balancer support
+ * New-AzureInternalLoadBalancerConfig
+ * Add-AzureInternalLoadBalancer
+ * Get-AzureInternalLoadBalancer
+ * Remove-AzureInternalLoadBalancer
+ * VM image disk improvements
+ * New-AzureVMImageDiskConfigSet
+ * Set-AzureVMImageOSDiskConfig
+ * Remove-AzureVMImageOSDiskConfig
+ * Set-AzureVMImageDataDiskConfig
+ * Remove-AzureVMImageDataDiskConfig
+ * Virtual network improvments
+ * Set-AzureVnetGatewayKey
+* Azure Automation cmdlets
+ * Get-AzureAutomationAccount
+ * Get-AzureAutomationJob
+ * Get-AzureAutomationJobOutput
+ * Get-AzureAutomationRunbook
+ * Get-AzureAutomationRunbookDefinition
+ * Get-AzureAutomationSchedule
+ * New-AzureAutomationRunbook
+ * New-AzureAutomationSchedule
+ * Publish-AzureAutomationRunbook
+ * Register-AzureAutomationScheduledRunbook
+ * Remove-AzureAutomationRunbook
+ * Remove-AzureAutomationSchedule
+ * Resume-AzureAutomationJob
+ * Set-AzureAutomationRunbook
+ * Set-AzureAutomationRunbookDefinition
+ * Set-AzureAutomationSchedule
+ * Start-AzureAutomationRunbook
+ * Stop-AzureAutomationJob
+ * Suspend-AzureAutomationJob
+ * Unregister-AzureAutomationScheduledRunbook
+* Traffic Manager cmdlets
+ * Add-AzureTrafficManagerEndpoint
+ * Disable-AzureTrafficManagerProfile
+ * Enable-AzureTrafficManagerProfile
+ * Get-AzureTrafficManagerProfile
+ * New-AzureTrafficManagerProfile
+ * Remove-AzureTrafficManagerEndpoint
+ * Remove-AzureTrafficManagerProfile
+ * Set-AzureTrafficManagerEndpoint
+ * Set-AzureTrafficManagerProfile
+ * Test-AzureTrafficManagerDomainName
+* Anti-Malware Cloud Service extension cmdlets
+ * Get-AzureServiceAntimalwareConfig
+ * Remove-AzureServiceAntimalwareExtension
+ * Set-AzureServiceAntimalwareExtension
+
+2014.05.07 Version 0.8.1
+* Managed cache cmdlets
+ * New-AzureManagedCache
+ * Set-AzureManagedCache
+ * Get-AzureManagedCache
+ * Remove-AzureManagedCache
+ * New-AzureManagedCacheAccessKey
+ * Get-AzureManagedCacheAccessKey
+* Fixed installer to support Windows PowerShell 5.0 Preview
+* Fixed a bunch of module loading issues
+* Documentation improvements
+* Engineering and infrastructure improvements
+
+2014.04.03 Version 0.8.0
+* Azure Resource Manager cmdlets (preview)
+ * Switch-AzureMode to switch the PowerShell module between service management and resource manager.
+ * Resource groups
+ * New-AzureResourceGroup
+ * Get-AzureResourceGroup
+ * Remove-AzureResourceGroup
+ * Get-AzureResourceGroupLog
+ * Templates
+ * Get-AzureResourceGroupGalleryTemplate
+ * Save-AzureResourceGroupGalleryTemplate
+ * Test-AzureResourceGroupTemplate
+ * Deployments
+ * New-AzureResourceGroupDeployment
+ * Get-AzureResourceGroupDeployment
+ * Resources
+ * New-AzureResource
+ * Get-AzureResource
+ * Set-AzureResource
+ * Remove-AzureResource
+* Azure Scheduler cmdlets
+ * Get-AzureSchedulerLocation
+ * Job collection
+ * Get-AzureSchedulerJobCollection
+ * Remove-AzureSchedulerJobCollection
+ * HTTP job and storage queue job
+ * New-AzureSchedulerHttpJob
+ * Set-AzureSchedulerHttpJob
+ * New-AzureSchedulerStorageQueueJob
+ * Set-AzureSchedulerStorageQueueJob
+ * Get-AzureSchedulerJob
+ * Remove-AzureSchedulerJob
+ * Get-AzureSchedulerJobHistory
+* Virtual Machine improvements
+ * Puppet extension
+ * Get-AzureVMPuppetExtension
+ * Set-AzureVMPuppetExtension
+ * Remove-AzureVMPuppetExtension
+ * Custom script extension
+ * Get-AzureVMCustomScriptExtension
+ * Set-AzureVMCustomScriptExtension
+ * Remove-AzureVMCustomScriptExtension
+ * VM Image support in the following cmdlets
+ * Get-AzureVMImage
+ * Save-AzureVMImage
+ * Remove-AzureVMImage
+ * New-AzureVM
+ * New-AzureQuickVM
+* Upgrade cloud service cmdlets dependencies to Azure SDK 2.3
+
+2014.03.11 Version 0.7.4
+* VM extension cmdlets
+ * Set-AzureVMExtension
+ * Get-AzureVMExtension
+ * Remove-AzureVMExtension
+ * Set-AzureVMAccessExtension
+ * Get-AzureVMAccessExtension
+ * Remove-AzureVMAccessExtension
+* Multi-thread support in storage cmdlets
+* Add YARN support via -Yarn parameter on Add-AzureHDInsightConfigValues
+
+2014.02.25 Version 0.7.3.1
+* Hotfix for https://github.com/WindowsAzure/azure-sdk-tools/issues/2350
+
+2014.02.12 Version 0.7.3
+* Web Site cmdlets
+ * Slot
+ * All Web Site cmdlets takes a new -Slot parameter
+ * Switch-AzureWebsiteSlot to swap slots
+ * WebJob
+ * Get-AzureWebsiteJob
+ * New-AzureWebsiteJob
+ * Remove-AzureWebsiteJob
+ * Start-AzureWebsiteJob
+ * Stop-AzureWebsiteJob
+ * Get-AzureWebsiteJobHistory
+ * Publish project to Web Site via WebDeploy
+ * Publish-AzureWebsiteProject
+ * Test Web Site name availability
+ * Test-AzureName -Website
+* Virtual Machine cmdlets
+ * Generic extension
+ * Get-AzureVMAvailableExtension
+ * Get-AzureServiceAvailableExtension
+ * BGInfo extension
+ * Get-AzureVMBGInfoExtension
+ * Set-AzureVMBGInfoExtension
+ * Remove-AzureBMBGInfoExtension
+ * VM role size
+ * Get-AzureRoleSize
+ * New-AzureQuickVM -InstanceSize takes a string instead of enum
+ * Other improvements
+ * Add-AzureProvisioningConfig will enable guest agent by default. Use -DisableGuestAgent to disable it
+* Cloud Service cmdlets
+ * Generic extension
+ * Get-AzureServiceExtension
+ * Set-AzureServiceExtension
+ * Remove-AzureServiceExtension
+ * Active directory domain extension
+ * Get-AzureServiceADDomainExtension
+ * Set-AzureServiceADDomainExtension
+ * Remove-AzureServiceADDomainExtension
+ * New-AzureServiceADDomainExtensionConfig
+Virtual Network cmdlets
+ * Get-AzureStaticVNetIP
+ * Set-AzureStaticVNetIP
+ * Remove-AzureStaticVNetIP
+ * Test-AzureStaticVNetIP
+* Storage cmdlets
+ * Metrics and logging
+ * Get-AzureStorageServiceLoggingProperty
+ * Set-AzureStorageServiceLoggingProperty
+ * Get-AzureStorageServiceMetricsProperty
+ * Set-AzureStorageServiceMetricsProperty
+ * Timeout configuration via -ServerTimeoutRequest and -ClientTimeoutRequest parameters
+ * Paging support via -MaxCount and -ContinuationToken parameters
+ * Get-AzureStorageBlob
+ * Get-AzureStorageContainer
+* ExpressRoute cmdlets (in ExpressRoute module)
+ * Get-AzureDedicatedCircuit
+ * Get-AzureDedicatedCircuitLink
+ * Get-AzureDedicatedCircuitServiceProvider
+ * New-AzureDedicatedCircuit
+ * New-AzureDedicatedCircuitLink
+ * Remove-AzureDedicatedCircuit
+ * Remove-AzureDedicatedCircuitLink
+ * Get-AzureBGPPeering
+ * New-AzureBGPPeering
+ * Remove-AzureBGPPeering
+ * Set-AzureBGPPeering
+
+
+2013.12.19 Version 0.7.2.1
+* Hotfix for some encoding issue with Hive query which contain "%".
+
+2013.12.10 Version 0.7.2
+* HDInsight cmdlets
+ * Add-AzureHDInsightConfigValues
+ * Add-AzureHDInsightMetastore
+ * Add-AzureHDInsightStorage
+ * Get-AzureHDInsightCluster
+ * Get-AzureHDInsightJob
+ * Get-AzureHDInsightJobOutput
+ * Get-AzureHDInsightProperties
+ * New-AzureHDInsightCluster
+ * New-AzureHDInsightClusterConfig
+ * New-AzureHDInsightHiveJobDefinition
+ * New-AzureHDInsightMapReduceJobDefinition
+ * New-AzureHDInsightPigJobDefinition
+ * New-AzureHDInsightSqoopJobDefinition
+ * New-AzureHDInsightStreamingMapReduceJobDefinition
+ * Remove-AzureHDInsightCluster
+ * Revoke-AzureHDInsightHttpServicesAccess
+ * Set-AzureHDInsightDefaultStorage
+ * Start-AzureHDInsightJob
+ * Stop-AzureHDInsightJob
+ * Use-AzureHDInsightCluster
+ * Wait-AzureHDInsightJob
+ * Grant-AzureHDInsightHttpServicesAccess
+ * Invoke-AzureHDInsightHiveJob
+* Configure Web Site WebSocket and managed pipe mode
+ * Set-AzureWebsite -WebSocketEnabled -ManagedPipelineMode
+* Configure Web Site remote debugging
+ * Enable-AzureWebsiteDebug -Version
+ * Disable-AzureWebsiteDebug
+* Options for cleaning up VHD when deleting VMs
+ * Remove-AzureVM -DeleteVHD
+ * Remove-AzureService -DeleteAll
+ * Remove-AzureDeployment -DeleteVHD
+* Virtual IP reservation preview feature (in AzurePreview module)
+ * Get-AzureDeployment
+ * Get-AzureReservedIP
+ * New-AzureReservedIP
+ * New-AzureVM
+ * Remove-AzureReservedIP
+* Support these cmdlets for Visual Studio Cloud Service projects:
+ * Start-AzureEmulator
+ * Publish-AzureServiceProject
+ * Save-AzureServiceProjectPackage
+
+
+2013.11.07 Version 0.7.1
+* Regression fixes
+ * Get-AzureWinRMUri cannot return the correct port number (https://github.com/WindowsAzure/azure-sdk-tools/issues/2056)
+ * New-AzureVM fails when creating a VM with a domain join provisioning (https://github.com/WindowsAzure/azure-sdk-tools/issues/2055)
+ * ACL for endpoints broken (https://github.com/WindowsAzure/azure-sdk-tools/issues/2054)
+ * Restarting web site will clean the host names (https://github.com/WindowsAzure/azure-sdk-tools/issues/2101)
+ * Creating a new Linux VM with an SSH certificate fails (https://github.com/WindowsAzure/azure-sdk-tools/issues/2057)
+ * Debug stream only prints out at the end of processing (https://github.com/WindowsAzure/azure-sdk-tools/issues/2033)
+* Cmdlets for creating Storage SAS token
+ * New-AzureStorageBlobSASToken
+ * New-AzureStorageContainerSASToken
+ * New-AzureStorageQueueSASToken
+ * New-AzureStorageTableSASToken
+* VM cmdlets for Windows Azure Pack
+ * Get-WAPackVM
+ * Get-WAPackVMOSDisk
+ * Get-WAPackVMSizeProfile
+ * Get-WAPackVMTemplate
+ * New-WAPackVM
+ * Remove-WAPackVM
+ * Restart-WAPackVM
+ * Resume-WAPackVM
+ * Set-WAPackVM
+ * Start-WAPackVM
+ * Stop-WAPackVM
+ * Suspend-WAPackVM
+
+2013.10.21 Version 0.7.0
+* Windows Azure Active Directory authentication support!
+ * Now you can use your Microsoft account or Organizational account to login from PowerShell without the need of any management certificate or publish settings file!
+ * Use Add-AzureAccount to get started
+ * Checkout Add-AzureAccount, Get-AzureAcccount and Remove-AzureAccount for details
+* Changed the file format which is used to store the subscription information. Information in the original file will be added to the new file automatically. If you downgrade from 0.7.0 to a lower version, you can still see the subscriptions you imported before the 0.7.0 upgrade. But anything added after the 0.7.0 upgrade won't show up in the downgrade.
+* BREAKING CHANGE
+ * Changed the assembly name and namespace from Microsoft.WindowsAzure.Management.* to Microsoft.WindowsAzure.Commands.*
+ * Select-AzureSubscription
+ * Now you can use it to select or clear either the current subscription or the default subscription
+ * Replaced the -Clear parameter with -NoCurrent parameter
+ * Set-AzureSubscription
+ * Removed -DefaultSubscription and -NoDefaultSubscription parameters. Go to Select-AzureSubscription with -Default and -NoDefault parameters.
+ * New-AzureSqlDatabaseServerContext
+ * Replaced the -SubscriptionData parameter with -SubscriptionName parameter
+* Upgraded Windows Azure SDK dependency from 1.8 to 2.2
+* Added support for a new virtual machine high memory SKU (A5)
+
+2013.08.22 Version 0.6.19
+* Media Services cmdlets
+ * Get-AzureMediaServicesAccount
+ * New-AzureMediaServicesAccount
+ * Remove-AzureMediaServicesAccount
+ * New-AzureMediaServicesKey
+* SQL Database Import/Export cmdlets
+ * Start-AzureSqlDatabaseImport
+ * Start-AzureSqlDatabaseExport
+ * Get-AzureSqlDatabaseImportExportStatus
+* Platform VM Image cmdlets (need to import the PIR module manually)
+ * Get-AzurePlatformVMImage
+ * Set-AzurePlatformVMImage
+ * Remove-AzurePlatformVMImage
+
+2013.07.31 Version 0.6.18
+* Service Bus authorization rule cmdlets
+ * New-AzureSBAuthorizationRule
+ * Get-AzureSBAuthorizationRule
+ * Set-AzureSBAuthorizationRule
+ * Remove-AzureSBAuthorizationRule
+* Some Windows Azure Pack fixes.
+
+2013.07.18 Version 0.6.17
+* Upgraded Windows Azure SDK dependency from 1.8 to 2.0.
+* SQL Azure database CRUD cmdlets don't require SQL auth anymore if the user owns the belonging subscription.
+* Get-AzureSqlDatabaseServerQuota cmdlet to get the quota information for a specified Windows Azure SQL Database Server.
+* SQL Azure service objective support
+ * Get-AzureSqlDatabaseServiceObjective cmdlet to a service objective for the specified Windows Azure SQL Database Server.
+ * Added -ServiceObjective parameter to Set-AzureSqlDatabase to set the service objective of the specified Windows Azure SQL database.
+* Fixed a Get-AzureWebsite local caching issue. Now Get-AzureWebsite will always return the up-to-date web site information.
+
+2013.06.24 Version 0.6.16
+* Add-AzureEnvironment to add customized environment like Windows Azure Pack
+* Set-AzureEnvironment to set customized environment like Windows Azure Pack
+* Remove-AzureEnvironment to remove customized environment like Windows Azure Pack
+* Web Site cmdlets now support Windows Azure Pack
+* Service Bus cmdlets now support Windows Azure Pack
+* Added "WAPack" prefix to all the cmdlets which support Windows Azure Pack. Use "help WAPack" to see all the supported cmdlets
+* Added -NoWinRMEndpoint parameter to New-AzureQuickVM and Add-AzureProvisioningConfig
+* Added -AllowAllAzureSerivces parameter to New-AzureSqlDatabaseServerFirewallRule
+* Many bug fixes around VM, Cloud Services and Web Site diagnostics
+
+2013.06.03 Version 0.6.15
+* Introduced the environment concept to support different Windows Azure environments
+ * Get-AzureEnvironment cmdlet to return all the out-of-box Windows Azure environments
+ * -Environment parameter in the following cmdlets to specify which environment to target
+ * Get-AzurePublishSettingsFile
+ * Show-AzurePortal
+* Windows Azure Web Site application diagnostics cmdlets
+ * Enable-AzureWebsiteApplicationDiagnostic
+ * Disable-AzureWebsiteApplicationDiagnostic
+* Stop-AzureVM
+ * Changed the behavior to deprovision the VM after stopping it
+ * -StayProvisioned parameter to keep the VM provisioned after stopping it
+* Windows Azure Cloud Services remote desktop extension cmdlets
+ * New-AzureServiceRemoteDesktopExtensionConfig
+ * Get-AzureServiceRemoteDesktopExtension
+ * Set-AzureServiceRemoteDesktopExtension
+ * Remove-AzureServiceRemoteDesktopExtension
+* Windows Azure Cloud Services diagnostics extension cmdlets
+ * New-AzureServiceDiagnosticsExtensionConfig
+ * Get-AzureServiceDiagnosticsExtension
+ * Set-AzureServiceDiagnosticsExtension
+ * Remove-AzureServiceDiagnosticsExtension
+* Windows Azure Virtual Machine endpoint enhancements
+ * Cmdlets to create ACL configuration objects
+ * New-AzureVMAclConfig
+ * Get-AzureVMAclConfig
+ * Set-AzureVMAclConfig
+ * Remove-AzureVMAclConfig
+ * -ACL parameter to support ACL in
+ * Add-AzureEndpoint
+ * Set-AzureEndpoint
+ * -DirectServerReturn parameter in
+ * Add-AzureEndpoint
+ * Set-AzureEndpoint
+ * Set-AzureLoadBalancedEndpoint cmdlet to modify load balanced endpoints
+* Bug fixes
+ * Fixed New-AzureSqlDatabaseServerContext model mismatch warning
+
+2013.05.08 Version 0.6.14
+* Windows Azure Storage Table cmdlets
+ * Get-AzureStorageTable
+ * New-AzureStorageTable
+ * Remove-AzureStorageTable
+* Windows Azure Storage Queue cmdlets
+ * Get-AzureStorageQueue
+ * New-AzureStorageQueue
+ * Remove-AzureStorageQueue
+* Fix an issue in Publish-AzureServiceProject when swapping between staging and production slot
+
+2013.04.23 Version 0.6.13.1
+* Hotfix to make Set-AzureStorageAccount behave correctly with the -GeoReplicationEnabled parameter
+
+2013.04.16 Version 0.6.13
+* Completely fixed issues with first website creation on a new account. Now you can use PowerShell with a new account directly without the need to go to the Azure portal.
+* BREAKING CHANGE: New-AzureVM and New-AzureQuickVM now require an –AdminUserName parameter when creating Windows based VMs.
+* Added support for virtual machine high memory SKUs (A6 and A7).
+* Remote PowerShell is now enabled by default on Windows based VMs using https. To disable: specify the –DisableWinRMHttps parameter on New-AzureQuickVM or Add-AzureProvisioningConfig. To enable using http: specify –EnableWinRMHttp parameter (Note: http is intended for VM to VM communication and a public endpoint is not created by default).
+* Added Get-AzureWinRMUri new cmdlet to get the connection string URI for Windows Remote Management.
+* Added Set-AzureAvailabilitySet new cmdlet to group similar virtual machines into an availability set after deployment.
+* New-AzureVM and New-AzureQuickVM now support a parameter named –X509Certificates. When a certificate is added to this array it is automatically uploaded and deployed to the virtual machine.
+* Improved *-AzureEndpoint cmdlets:
+ * Allows a simple endpoint to be created.
+ * Allows a load balanced endpoint to be created.
+ * Allows a load balanced endpoint to be created with a health probe and you can now specify the Probe Interval and Timeout periods.
+* Removed subscription check requirement when using Add-AzureVHD with a shared access signature.
+* Added Simultaneous Upgrade option to New-AzureDeployment for Cloud Services deployment. This option can save a significant amount of time during deployments to staging. This option can cause downtime and should only be used in non-production deployments.
+* Upgraded to the latest service management library.
+* Made New-AzureDeployment to use SSL during the deployment.
+* Added Get-AzureWebsiteLog -ListPath to get all the available log paths of the website.
+* Fixed the issue of removing custom DNS names in Start/Stop/Restart-AzureWebsite.
+* Fixed several GB18030 encoding issues.
+* Renamed Start/Stop-CopyAzureStorageBlob to Start/Stop-AzureStorageBlobCopy. Kept old names as aliases for backward compatibility.
+
+2013.03.26 Version 0.6.12.1
+ * Hotfix to fix issues with first website creation on a new account.
+
+2013.03.20 Version 0.6.12
+ * Windows Azure Storage entity level cmdlets
+ * New-AzureStorageContext
+ * New-AzureStorageContainer
+ * Get-AzureStorageContainer
+ * Remove-AzureStorageContainer
+ * Get-AzureStorageContainerAcl
+ * Set-AzureStorageContainerAcl
+ * Get-AzureStorageBlob
+ * Get-AzureStorageBlobContent
+ * Set-AzureStorageBlobContent
+ * Remove-AzureStorageBlob
+ * Start-CopyAzureStorageBlob
+ * Stop-CopyAzureStorageBlob
+ * Get-AzureStorageBlobCopyState
+ * Windows Azure Web Sites diagnostics log streaming cmdlet
+ * Get-AzureWebsitLog -Tail
+
+2013.03.06 Version 0.6.11
+ * Windows Azure Store cmdlets
+ * Upgraded to the latest service management library and update service management version header to 2012-12-01
+ * Added Save-AzureVhd cmdlet
+ * Updated Add-AzureVMImage, Get-AzureVMImage and Set-AzureVMImage cmdlets to support new attributes in service management version header 2012-12-01
+
+2013.02.11 Version 0.6.10
+ * Upgrade to use PowerShell 3.0
+ * Released source code for VM and Cloud Services cmdlets
+ * Added a few new cmdlets for Cloud Services (Add-AzureWebRole, Add-AzureWorkerRole, NewAzureRoleTemplate, Save-AzureServiceProjectPackage, Set-AzureServiceProjectRole -VMSize), See Web Camps TV (http://channel9.msdn.com/Shows/Web+Camps+TV/Whats-Coming-in-the-Command-Line-Tools-for-Windows-Azure-with-Glenn-Block) for more on these new cmdlets.
+ * Added Support for SAS in destination Uri for Add-AzureVhd
+ * Added -Confirm and -WhatIf support for Remove-Azure* cmdlets
+ * Added configurable startup task for Node.js and generic roles
+ * Enabled emulator support when running roles with memcache
+ * Role based cmdlets don't require role name if run in a role folder
+ * Added scenario test framework and started adding automated scenario tests
+ * Multiple bug fixes
+
+2012.12.12 Version 0.6.9
+ * Added Service Bus namespace management cmdlets 'help azuresb'
+ * Added -ServiceBusNamespace parameter to 'Test-AzureName' to verify namespace availability
+ * Added VHD uploader cmdlet 'Add-AzureVHD' for uploading VM images to blob storage.
+ * Improved message reporting and piping for couple scaffolding cmdlets
+ * Fixed PHP customization functionality for modifying php.ini and installing custom extensions
+ * Verbose option is enabled by default when using Windows Azure PowerShell shortcut
+
+2012.11.21 Version 0.6.8
+ * Multiple bug fixes
+ * Added dedicated cache role support
+ * Added GitHub support
+
+2012.10.08 Version 0.6.5
+ * Adding websites cmdlets
+
+2012.06.06 Version 0.6.0
+ * Adding PowerShell management cmdlets
+ * Adding PHP Cmdlets
+ * Renaming existing cmdlets to remove duplication
+ * Node.exe is no longer embedded
+
+2012.05.11 Version 0.5.4
+ * node 0.6.17
+ * iisnode 0.1.19
+
+2012.02.17 Version 0.5.3
+ * Bug fixes
+
+2012.02.10 Version 0.5.2
+ * Bug fixes
+
+2011.12.23 Version 0.5.1
+ * Added Remote Desktop support
+ * Added SSL support
+ * node 0.6.6
+ * iisnode 0.1.13
+
+2011.12.09 Version 0.5.0
+ * Initial Release
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 000000000000..6c2043804518
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,208 @@
+MICROSOFT SOFTWARE LICENSE TERMS
+
+MICROSOFT AZURE POWERSHELL
+
+These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any.
+
+BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.
+
+
+-----------------START OF LICENSE--------------------------
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+-------------------END OF LICENSE-------------------------------
+
+The software includes the AutoMapper library ("AutoMapper"). The MIT License set out below is provided for informational purposes only. It is not the license that governs any part of the software.
+
+----------------START OF LICENSE--------------------------------
+
+Provided for Informational Purposes Only
+
+AutoMapper
+
+The MIT License (MIT)
+
+Copyright (c) 2010 Jimmy Bogard
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------END OF LICENSE----------------------------------------
+
diff --git a/README.md b/README.md
new file mode 100644
index 000000000000..8594458346bd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,297 @@
+# Microsoft Azure PowerShell
+
+This repository contains a set of PowerShell cmdlets for developers and administrators to develop, deploy and manage Microsoft Azure applications.
+
+* For documentation on how to build and deploy applications to Microsoft Azure please see the [Microsoft Azure Documentation Center](http://azure.microsoft.com/en-us/documentation/).
+* For comprehensive documentation on the developer cmdlets see [How to install and configure Azure PowerShell](http://azure.microsoft.com/en-us/documentation/articles/install-configure-powershell/).
+* For comprehensive documentation on the full set of Microsoft Azure cmdlets see [Microsoft Azure Management Center](http://go.microsoft.com/fwlink/?linkID=254459&clcid=0x409).
+
+## Features
+
+* Account
+ * Get and import Azure publish settings
+ * Login with Microsoft account or Organizational account through Microsoft Azure Active Directory
+* Environment
+ * Get the different out-of-box Microsoft Azure environments
+ * Add/Set/Remove customized environments (like your Windows Azure Pack environments)
+ * Get Azure publish settings for a particular environment
+* Subscription
+ * Manage Azure subscription
+ * Manage AffinityGroup
+* Website
+ * Manage website, such as CRUD, start and stop.
+ * Manage slot
+ * Manage WebJob
+ * Deploy project via WebDeploy
+ * Diagnostics
+ * Configure site and application diagnostics
+ * Log streaming
+ * Save log
+* Cloud Services
+ * Create scaffolding for cloud service and role. Role support includes Node.js, PHP, Django and Cache.
+ * Manage cloud service and role, such as CRUD, start and stop.
+ * Manage extension
+ * Start/Stop Azure emulator.
+ * Manage certificate.
+ * Manage cloud service extensions
+ * Remote desktop
+ * Diagnostics
+ * Microsoft Antimalware
+ * Windows Azure Diagnostics
+* Storage
+ * Manage storage account and access key.
+ * Manage storage container and blob, with paging.
+ * Copy storage blob.
+ * Manage storage table.
+ * Manage storage queue.
+ * Create SAS token.
+ * Manage metrics and logging.
+ * Configure timeout
+* SQL Database
+ * CRUD support for database server, database and firewall rule.
+ * Get database server quota.
+ * Get/Set database server service objective.
+ * Manage database copies and active geo-replication.
+ * Get dropped databases that can be restored.
+ * Issue requests to restore a live or dropped database to a point in time.
+ * Issue requests to recover a database from an unavailable database server.
+ * Manage database and database server auditing policy.
+* Service Bus
+ * Manage service bus namespaces.
+* VM
+ * Manage VM, such as CRUD, import/export and start/stop/restart.
+ * Manage VM image and VM image disks.
+ * Manage disk, such as CRUD.
+ * Manage VM endpoint, such as CRUD and ACL.
+ * Get/Set VM sub net.
+ * Manage certificate and SSH key.
+ * PowerShell remoting
+ * Manage extension
+ * BG Info
+ * Puppet
+ * Custom Script
+ * Access
+ * Microsoft Antimalware
+ * PowerShell DSC
+ * Windows Azure Diagnostics
+ * Public IP, reserved IP and internal load balancer
+* Deployment
+ * Manage deployment, such as CRUD, move, upgrade and restore.
+ * Get/Create DNS settings of a deployment.
+* VNet
+ * Manage virtual network config, connection and gateway.
+ * Manage static IP
+* Azure Media Services
+ * Create, read and delete Media Services Accounts
+ * Generate new account keys for Media Services Accounts
+* HDInsight
+ * Manage clusters, such as CRUD, add/set storage
+ * Manage jobs, such as CRUD, start/stop/wait/invoke
+ * Manage HTTP service access. such as grant/revoke
+* Store
+ * View available Microsoft Azure Store Add-On plans.
+ * Purchase, view, upgrade and remove Microsoft Azure Store Add-On instances.
+* Utility
+ * Test whether a name is available. Currently support cloud service name, storage account name and service bus namespace name.
+ * Get the list of geo locations supported by Azure.
+ * Get the list of OS supported by Azure.
+ * Direct you to Azure portal.
+* Windows Azure Pack
+ * Web Site: CRUD web site, deployment, configure and get log, start/stop/restart/show web site
+ * Service Bus: CRD namespace
+ * VM: CRUD VM, get OS disk, size profile and VM template, start/stop/restart/suspend/resume VM
+ * VNET: CRUD VNET and subnet.
+ * Cloud Service: CRUD cloud service.
+* ExpressRoute
+ * Manage dedicated circuit
+ * Manage BGP peering
+* Scheduler
+ * Manage job collections
+ * Manage HTTP and storage queue jobs
+* Resource Manager
+ * Manage resource groups and deployments
+ * Query and download gallery templates
+ * Manage individual resources
+* Traffic Manager
+ * Manage profiles and endpoints
+* Azure Automation
+ * Manage automation accounts
+ * Manage automation jobs, runbooks and schedules
+
+For detail descriptions and examples of the cmdlets, type
+* ```help azure``` to get all the cmdlets.
+* ```help node-dev``` to get all Node.js development related cmdlets.
+* ```help php-dev``` to get all PHP development related cmdlets.
+* ```help python-dev``` to get all Python development related cmdlets.
+* ```help ``` to get the details of a specific cmdlet.
+
+## Supported Environments
+
+* [Microsoft Azure](http://www.azure.microsoft.com)
+* [Windows Azure Pack](http://www.microsoft.com/en-us/server-cloud/windows-azure-pack.aspx)
+* [Microsoft Azure China](http://www.windowsazure.cn/)
+
+## Installation
+
+### Microsoft Web Platform Installer
+
+1. Install [Microsoft Web Platform Installer](http://www.microsoft.com/web/downloads/platform.aspx).
+2. Open Microsoft Web Platform Installer and search for __Microsoft Azure PowerShell__.
+3. Install.
+
+You can also find the standalone installers for all the versions at [Downloads](https://github.com/Azure/azure-sdk-tools/releases)
+
+### Source Code
+
+1. Download the source code from GitHub repo
+2. Follow the [Microsoft Azure PowerShell Developer Guide](https://github.com/Azure/azure-sdk-tools/wiki/Windows-Azure-PowerShell-Developer-Guide)
+
+### Supported PowerShell Versions
+
+* 0.6.9 or lower
+ * [Windows PowerShell 2.0](http://technet.microsoft.com/en-us/scriptcenter/dd742419)
+ * [Windows PowerShell 3.0](http://www.microsoft.com/en-us/download/details.aspx?id=34595)
+* 0.6.10 to higher
+ * [Windows PowerShell 3.0](http://www.microsoft.com/en-us/download/details.aspx?id=34595)
+
+## Get Started
+
+In general, following are the steps to start using Microsoft Azure PowerShell
+
+* Get yourself authenticated with Microsoft Azure. For details, please check out [this article](http://azure.microsoft.com/en-us/documentation/articles/install-configure-powershell/).
+ * Option 1: Login with your Microsoft account or Organizational account directly from PowerShell. Microsoft Azure Active Directory authentication is used in this case. No management certificate is needed.
+ * Starting from 0.8.6, you can use ``Add-AzureAccount -Credential`` to avoid the browser pop up for Organizational account.
+ * Option 2: Download and import a publish settings file which contains a management certificate.
+* Use the cmdlets
+
+The first step can be different for different environment you are targeting. Following are detail instructions for each supported environment.
+
+### Microsoft Azure
+
+If you use both mechanisms on the same subscription, Microsoft Azure Active Directory authentication always wins. If you want to go back to management certificate authentication, please use ``Remove-AzureAccount``, which will remove the Microsoft Azure Active Directory information and bring management certificate authentication back in.
+
+#### Login directly from PowerShell (Microsoft Azure Active Directory authentication)
+
+```powershell
+# Pop up an embedded browser control for you to login
+Add-AzureAccount
+
+# use the cmdlets to manage your services/applications
+New-AzureWebsite -Name mywebsite -Location "West US"
+```
+
+#### Use publish settings file (Management certificate authentication)
+
+```powershell
+# Download a file which contains the publish settings information of your subscription.
+# This will open a browser window and ask you to log in to get the file.
+Get-AzurePublishSettingsFile
+
+# Import the file you just downloaded.
+# Notice that the file contains credential of your subscription so you don't want to make it public
+# (like check in to source control, etc.).
+Import-AzurePublishSettingsFile ""
+
+# Use the cmdlets to manage your services/applications
+New-AzureWebsite -Name mywebsite -Location "West US"
+```
+
+### Microsoft Azure China
+
+```powershell
+# Check the environment supported by your Microsoft Azure PowerShell installation.
+Get-AzureEnvironment
+
+# Download a file which contains the publish settings information of your subscription.
+# Use the -Environment parameter to target Microsoft Azure China.
+# This will open a browser window and ask you to log in to get the file.
+Get-AzurePublishSettingsFile -Environment "AzureChinaCloud"
+
+# Import the file you just downloaded.
+# Notice that the file contains credential of your subscription so you don't want to make it public
+# (like check in to source control, etc.).
+Import-AzurePublishSettingsFile ""
+
+# Use the cmdlets to manage your services/applications
+New-AzureWebsite -Name mywebsite -Location "China East"
+```
+
+### Windows Azure Pack
+
+```powershell
+# Add your Windows Azure Pack environment to your Microsoft Azure PowerShell installation.
+# You will need to know the following information of your Windows Azure Pack environment.
+# 1. URL to download the publish settings file Mandatory
+# 2. Management service endpoint Optional
+# 3. Management Portal URL Optional
+# 4. Storage service endpoint Optional
+Add-WAPackEnvironment -Name "MyWAPackEnv" `
+ -PublishSettingsFileUrl "URL to download the publish settings file>" `
+ -ServiceEndpoint "" `
+ -ManagementPortalUrl "" `
+ -StorageEndpoint ""
+
+# Download a file which contains the publish settings information of your subscription.
+# Use the -Environment parameter to target your Windows Azure Pack environment.
+# This will open a browser window and ask you to log in to get the file.
+Get-WAPackPublishSettingsFile -Environment "MyWAPackEnv"
+
+# Import the file you just downloaded.
+# Notice that the file contains credential of your subscription so you don't want to make it public
+# (like check in to source control, etc.).
+Import-WAPackPublishSettingsFile ""
+
+# Use the cmdlets to manage your services/applications
+New-WAPackWebsite -Name mywebsite
+```
+## 2 Modes
+
+Starting from 0.8.0, we are adding a separate mode for Resource Manager. You can use the following cmdlet to switch between the
+
+* Service management: cmdlets using the Azure service management API
+* Resource manager: cmdlets using the Azure Resource Manager API
+
+They are not designed to work together.
+
+```powershell
+Switch-AzureMode AzureServiceManagement
+Switch-AzureMode AzureResourceManager
+```
+
+## Find Your Way
+
+All the cmdlets can be put into 3 categories:
+
+1. Cmdlets support both Microsoft Azure and Windows Azure Pack
+2. Cmdlets only support both Microsoft Azure
+3. Cmdlets only support Windows Azure Pack
+
+* For category 1, we are using an "Azure" prefix in the cmdlet name and adding an alias with "WAPack" prefix.
+* For category 2, we are using an "Azure" prefix in the cmdlet name.
+* For category 2, we are using an "WAPack" prefix in the cmdlet name.
+
+So you can use the following cmdlet to find out all the cmdlets for your environment
+
+```powershell
+# Return all the cmdlets for Microsoft Azure
+Get-Command *Azure*
+
+# Return all the cmdlets for Windows Azure Pack
+Get-Command *WAPack*
+```
+
+If you want to migrate some scripts from Microsoft Azure to Windows Azure Pack or vice versa, as long as the cmdlets you are using are in category 1, you should be able to migrate smoothly.
+
+## Need Help?
+
+Be sure to check out the [Microsoft Azure Developer Forums on Stack Overflow](http://go.microsoft.com/fwlink/?LinkId=234489) if you have trouble with the provided code.
+
+## Contribute Code or Provide Feedback
+
+If you would like to become an active contributor to this project please follow the instructions provided in [Microsoft Azure Projects Contribution Guidelines](http://windowsazure.github.com/guidelines.html).
+
+If you encounter any bugs with the library please file an issue in the [Issues](https://github.com/Azure/azure-sdk-tools/issues) section of the project.
+
+# Learn More
+
+* [Microsoft Azure Script Center](http://www.azure.microsoft.com/en-us/documentation/scripts/)
diff --git a/build.proj b/build.proj
new file mode 100644
index 000000000000..b5bca7189965
--- /dev/null
+++ b/build.proj
@@ -0,0 +1,215 @@
+
+
+
+
+
+ .\src\ServiceManagement\Services\Commands\bin
+ .\src\ServiceManagement\Services\Commands.Test\bin
+ Microsoft.WindowsAzure.Commands.Test.dll
+ .\setup\build
+ .\src\Publish
+ .\src\Package
+ $(PublishDirectory)\Build
+ $(PublishDirectory)\Setup
+ $(PublishDirectory)\TestResults
+ Configuration=Debug;Platform=Any CPU
+ Configuration=Release;Platform=Any CPU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(MSBuildProjectDirectory)\src\.nuget\NuGet.exe
+ $(MSBuildProjectDirectory)\restore.config
+ -ConfigFile "$(NuGetRestoreConfigFile)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ RunType=LiveOnly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages.config b/packages.config
new file mode 100644
index 000000000000..b5d4b5dd7173
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/setup/Setup/CustomAction.config b/setup/Setup/CustomAction.config
new file mode 100644
index 000000000000..de951b78d854
--- /dev/null
+++ b/setup/Setup/CustomAction.config
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/Setup/CustomAction.cs b/setup/Setup/CustomAction.cs
new file mode 100644
index 000000000000..4fb665f4daf5
--- /dev/null
+++ b/setup/Setup/CustomAction.cs
@@ -0,0 +1,109 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+namespace Microsoft.WindowsAzure.Setup
+{
+ using System;
+ using System.IO;
+ using Deployment.WindowsInstaller;
+ using System.Threading;
+
+ public class CustomAction
+ {
+ // The exception object which will store (if) exception which is occured in our sta thread
+ private static Exception _STAThreadException;
+
+ private static uint[] powerShellDefaultColorTable = new uint[]
+ {
+ 0x0, 0x800000, 0x8000, 0x808000, 0x80, 0x562401, 0xF0EDEE, 0xC0C0C0,
+ 0x808080, 0xFF0000, 0xFF00, 0xFFFF00, 0xFF, 0xFF00FF, 0xFFFF, 0xFFFFFF
+ };
+
+ // Method which contains our custom action behaviour
+ private static void RunSTAThread(object sessionObject)
+ {
+ try
+ {
+ Session session = sessionObject as Session;
+
+ string powerShellShortcutPath = session.CustomActionData["ShortcutPath"];
+ string powerShellDefaultShortcutPath = session.CustomActionData["DefaultShortcutPath"];
+
+ if (!File.Exists(powerShellShortcutPath))
+ {
+ _STAThreadException = new Exception(string.Format("UpdatePSShortcut: file {0} does not exist", powerShellShortcutPath));
+ return;
+ }
+
+ ShellLink powerShellShellLink = new ShellLink(powerShellShortcutPath);
+ if (File.Exists(powerShellDefaultShortcutPath))
+ {
+ session.Log("UpdatePSShortcut: found default Windows PowerShell shortcut at {0}", powerShellDefaultShortcutPath);
+ ShellLink powerShellDefaultShellLink = new ShellLink(powerShellDefaultShortcutPath);
+ powerShellShellLink.ConsoleProperties = powerShellDefaultShellLink.ConsoleProperties;
+ }
+ else
+ {
+ session.Log("UpdatePSShortcut: default Windows PowerShell shortcut does not exist at {0}", powerShellDefaultShortcutPath);
+
+ for (int i = 0; i < powerShellShellLink.ConsoleProperties.ColorTable.Length; i++)
+ {
+ powerShellShellLink.ConsoleProperties.ColorTable[i] = powerShellDefaultColorTable[i];
+ }
+ powerShellShellLink.AutoPosition = true;
+ powerShellShellLink.CommandHistoryBufferSize = 50;
+ powerShellShellLink.CommandHistoryBufferCount = 4;
+
+ powerShellShellLink.InsertMode = true;
+
+ powerShellShellLink.PopUpBackgroundColor = 15;
+ powerShellShellLink.PopUpTextColor = 3;
+
+ powerShellShellLink.QuickEditMode = true;
+
+ powerShellShellLink.ScreenBackgroundColor = 5;
+ powerShellShellLink.ScreenTextColor = 6;
+
+ powerShellShellLink.SetScreenBufferSize(120, 3000);
+ powerShellShellLink.SetWindowSize(120, 50);
+ }
+ powerShellShellLink.Save();
+ session.Log("UpdatePSShortcut: success");
+ }
+ catch (Exception ex)
+ {
+ _STAThreadException = new Exception(string.Format("UpdatePSShortcut: failed with exception {0}", ex.Message));
+ }
+ }
+
+ [CustomAction]
+ public static ActionResult UpdatePSShortcut(Session session)
+ {
+ Thread staThread = new Thread(RunSTAThread);
+ staThread.SetApartmentState(ApartmentState.STA);
+ staThread.Start(session);
+ // Wait for the new thread to finish its operations
+ staThread.Join();
+
+ // If there is any exception in the new thread pass it to the installer
+ if (_STAThreadException != null)
+ {
+ session.Log(_STAThreadException.Message);
+ return ActionResult.Failure;
+ }
+
+ return ActionResult.Success;
+ }
+ }
+}
\ No newline at end of file
diff --git a/setup/Setup/Properties/AssemblyInfo.cs b/setup/Setup/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000000..6d3ae6c5b4e0
--- /dev/null
+++ b/setup/Setup/Properties/AssemblyInfo.cs
@@ -0,0 +1,48 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Setup")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Setup")]
+[assembly: AssemblyCopyright("Copyright © Microsoft")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f4aa30f2-d2ce-4aef-88ed-a048b771c272")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/setup/Setup/Setup.csproj b/setup/Setup/Setup.csproj
new file mode 100644
index 000000000000..6a7a64f7c639
--- /dev/null
+++ b/setup/Setup/Setup.csproj
@@ -0,0 +1,50 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D}
+ Library
+ Properties
+ Microsoft.WindowsAzure.Setup
+ Microsoft.WindowsAzure.Setup
+ v4.5
+ 512
+ $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/Setup/ShellLink.cs b/setup/Setup/ShellLink.cs
new file mode 100644
index 000000000000..8668707bcc4a
--- /dev/null
+++ b/setup/Setup/ShellLink.cs
@@ -0,0 +1,447 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+namespace Microsoft.WindowsAzure.Setup
+{
+ using System;
+ using System.Diagnostics.CodeAnalysis;
+ using System.IO;
+ using System.Runtime.InteropServices;
+ using System.Text;
+
+ // IShellLink.ShowCmd fFlags
+ [Flags]
+ public enum ShowCmd
+ {
+ SW_SHOWNORMAL = 1,
+ SW_SHOWMAXIMIZED = 3,
+ SW_SHOWMINNOACTIVE = 7
+ }
+
+ // IShellLink.Resolve fFlags
+ [Flags]
+ public enum SLR_FLAGS
+ {
+ SLR_NO_UI = 0x1,
+ SLR_ANY_MATCH = 0x2,
+ SLR_UPDATE = 0x4,
+ SLR_NOUPDATE = 0x8,
+ SLR_NOSEARCH = 0x10,
+ SLR_NOTRACK = 0x20,
+ SLR_NOLINKINFO = 0x40,
+ SLR_INVOKE_MSI = 0x80
+ }
+
+ // IShellLink.GetPath fFlags
+ [Flags]
+ public enum SLGP_FLAGS
+ {
+ SLGP_SHORTPATH = 0x1,
+ SLGP_UNCPRIORITY = 0x2,
+ SLGP_RAWPATH = 0x4
+ }
+
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Matching COM Names")]
+ [ComImport,
+ InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
+ Guid("000214F9-0000-0000-C000-000000000046")]
+ public interface IShellLinkW
+ {
+ void GetPath(
+ [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
+ int cchMaxPath,
+ out WIN32_FIND_DATAW pfd,
+ SLGP_FLAGS fFlags);
+
+ void GetIDList(
+ out IntPtr ppidl);
+
+ void SetIDList(
+ IntPtr pidl);
+
+ void GetDescription(
+ [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName,
+ int cchMaxName);
+
+ void SetDescription(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszName);
+
+ void GetWorkingDirectory(
+ [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir,
+ int cchMaxPath);
+
+ void SetWorkingDirectory(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszDir);
+
+ void GetArguments(
+ [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs,
+ int cchMaxPath);
+
+ void SetArguments(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
+
+ void GetHotkey(
+ out short pwHotkey);
+
+ void SetHotkey(
+ short wHotkey);
+
+ void GetShowCmd(
+ out int piShowCmd);
+
+ void SetShowCmd(
+ int iShowCmd);
+
+ void GetIconLocation(
+ [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
+ int cchIconPath,
+ out int piIcon);
+
+ void SetIconLocation(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath,
+ int iIcon);
+
+ void SetRelativePath(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel,
+ int dwReserved);
+
+ void Resolve(
+ IntPtr hwnd,
+ SLR_FLAGS fFlags);
+
+ void SetPath(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszFile);
+ }
+
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Matching COM Names")]
+ [ComImport,
+ InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
+ Guid("45E2b4AE-B1C3-11D0-B92F-00A0C90312E1")]
+ public interface IShellLinkDataList
+ {
+ void AddDataBlock(
+ IntPtr pDataBlock);
+
+ void CopyDataBlock(
+ uint dwSig,
+ out IntPtr ppDataBlock);
+
+ void RemoveDataBlock(
+ uint dwSig);
+
+ void GetFlags(
+ out int dwFlags);
+
+ void SetFlags(
+ uint dwFlags);
+ }
+
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Matching COM Names")]
+ [ComImport,
+ InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
+ Guid("0000010B-0000-0000-C000-000000000046")]
+ public interface IPersistFile
+ {
+ #region Methods inherited from IPersist
+
+ void GetClassID(
+ out Guid pClassID);
+
+ #endregion
+
+ [PreserveSig]
+ int IsDirty();
+
+ void Load(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
+ int dwMode);
+
+ void Save(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
+ [MarshalAs(UnmanagedType.Bool)] bool fRemember);
+
+ void SaveCompleted(
+ [MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
+
+ void GetCurFile(
+ out IntPtr ppszFileName);
+ }
+
+ // Win32 COORD
+ [StructLayout(LayoutKind.Sequential)]
+ public struct COORD
+ {
+ public short X;
+ public short Y;
+ }
+
+ // IShellDataLink NT_CONSOLE_PROPS
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Matching Windows Struct Names")]
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Matching Windows Struct Names")]
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct NT_CONSOLE_PROPS
+ {
+ public int cbSize; // Size of this extra data block
+ public uint dwSignature; // signature of this extra data block
+ public ushort wFillAttribute; // fill attribute for console
+ public ushort wPopupFillAttribute; // fill attribute for console popups
+ public COORD dwScreenBufferSize; // screen buffer size for console
+ public COORD dwWindowSize; // window size for console
+ public COORD dwWindowOrigin; // window origin for console
+ public int nFont;
+ public int nInputBufferSize;
+ public COORD dwFontSize;
+ public uint uFontFamily;
+ public uint uFontWeight;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string FaceName;
+ public uint uCursorSize;
+ public bool bFullScreen;
+ public bool bQuickEdit;
+ public bool bInsertMode;
+ public bool bAutoPosition;
+ public uint uHistoryBufferSize;
+ public uint uNumberOfHistoryBuffers;
+ public bool bHistoryNoDup;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+ public uint[] ColorTable;
+ }
+
+ // WIN32_FIND_DATA
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Matching Windows Struct Names")]
+ [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Matching Windows Struct Names")]
+ public struct WIN32_FIND_DATAW
+ {
+ public int dwFileAttributes;
+ public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
+ public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
+ public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
+ public int nFileSizeHigh;
+ public int nFileSizeLow;
+ public int dwReserved0;
+ public int dwReserved1;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAXPATH)]
+ public string cFileName;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
+ public string cAlternateFileName;
+ private const int MAXPATH = 260;
+ }
+
+ public class ShellLink
+ {
+ private IShellLinkW shellLink;
+ private NT_CONSOLE_PROPS consoleProperties;
+
+ public ShellLink(string path)
+ {
+ this.shellLink = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("00021401-0000-0000-C000-000000000046"))) as IShellLinkW;
+ if (File.Exists(path))
+ {
+ IntPtr consoleProperties = IntPtr.Zero;
+ ((IPersistFile)this.shellLink).Load(path, 0);
+
+ try
+ {
+ ((IShellLinkDataList)this.shellLink).CopyDataBlock(0xA0000002, out consoleProperties);
+ this.consoleProperties = (NT_CONSOLE_PROPS)Marshal.PtrToStructure(consoleProperties, typeof(NT_CONSOLE_PROPS));
+ }
+ catch (Exception)
+ {
+ }
+ }
+ else
+ {
+ ((IPersistFile)this.shellLink).Save(path, true);
+ }
+
+ // Initialize default Console Properties (TODO: Fix this bug too)
+ if (this.consoleProperties.dwSignature != 0xA0000002)
+ {
+ this.consoleProperties = new NT_CONSOLE_PROPS();
+ this.consoleProperties.cbSize = Marshal.SizeOf(this.consoleProperties);
+ this.consoleProperties.dwSignature = 0xA0000002;
+ this.consoleProperties.ColorTable = new uint[16];
+ for (int i = 0; i < 16; i++)
+ {
+ this.consoleProperties.ColorTable[i] = 0xffffffff;
+ }
+ }
+ }
+
+ public IShellLinkW IShellLink
+ {
+ get { return this.shellLink; }
+ }
+
+ public string Path
+ {
+ get
+ {
+ StringBuilder sb = new StringBuilder(260);
+ WIN32_FIND_DATAW pfd = new WIN32_FIND_DATAW();
+ this.IShellLink.GetPath(sb, 260, out pfd, SLGP_FLAGS.SLGP_RAWPATH);
+ return sb.ToString();
+ }
+ set
+ {
+ this.IShellLink.SetPath(value);
+ }
+ }
+
+ public string Description
+ {
+ get
+ {
+ StringBuilder sb = new StringBuilder(2048);
+ this.IShellLink.GetDescription(sb, 2048);
+ return sb.ToString();
+ }
+ set { this.IShellLink.SetDescription(value); }
+ }
+
+ public string WorkingDirectory
+ {
+ get
+ {
+ StringBuilder sb = new StringBuilder(260);
+ this.IShellLink.GetWorkingDirectory(sb, 260);
+ return sb.ToString();
+ }
+ set { this.IShellLink.SetWorkingDirectory(value); }
+ }
+
+ public ShowCmd ShowCmd
+ {
+ get
+ {
+ int showCmd;
+ this.IShellLink.GetShowCmd(out showCmd);
+ return (ShowCmd)Enum.ToObject(typeof(ShowCmd), showCmd);
+ }
+ set
+ {
+ this.IShellLink.SetShowCmd((int)value);
+ }
+ }
+
+ public NT_CONSOLE_PROPS ConsoleProperties
+ {
+ get { return this.consoleProperties; }
+ set { this.consoleProperties = value; }
+ }
+
+ public bool QuickEditMode
+ {
+ get { return this.consoleProperties.bQuickEdit; }
+ set { this.consoleProperties.bQuickEdit = value; }
+ }
+
+ public bool InsertMode
+ {
+ get { return this.consoleProperties.bInsertMode; }
+ set { this.consoleProperties.bInsertMode = value; }
+ }
+
+ public bool AutoPosition
+ {
+ get { return this.consoleProperties.bAutoPosition; }
+ set { this.consoleProperties.bAutoPosition = value; }
+ }
+
+ public uint CommandHistoryBufferSize
+ {
+ get { return this.consoleProperties.uHistoryBufferSize; }
+ set { this.consoleProperties.uHistoryBufferSize = value; }
+ }
+
+ public uint CommandHistoryBufferCount
+ {
+ get { return this.consoleProperties.uNumberOfHistoryBuffers; }
+ set { this.consoleProperties.uNumberOfHistoryBuffers = value; }
+ }
+
+ public byte ScreenBackgroundColor
+ {
+ set
+ {
+ this.consoleProperties.wFillAttribute &= 0x000f;
+ this.consoleProperties.wFillAttribute += (ushort)(value << 4);
+ }
+ }
+
+ public byte ScreenTextColor
+ {
+ set
+ {
+ this.consoleProperties.wFillAttribute &= 0x00f0;
+ this.consoleProperties.wFillAttribute += value;
+ }
+ }
+
+ public byte PopUpBackgroundColor
+ {
+ set
+ {
+ this.consoleProperties.wPopupFillAttribute &= 0x000f;
+ this.consoleProperties.wPopupFillAttribute += (ushort)(value << 4);
+ }
+ }
+
+ public byte PopUpTextColor
+ {
+ set
+ {
+ this.consoleProperties.wPopupFillAttribute &= 0x00f0;
+ this.consoleProperties.wPopupFillAttribute += value;
+ }
+ }
+
+ public void Save(string path)
+ {
+ this.SetConsoleProperties();
+ ((IPersistFile)this.shellLink).Save(path, true);
+ }
+
+ public void Save()
+ {
+ this.SetConsoleProperties();
+ ((IPersistFile)this.shellLink).Save(null, true);
+ }
+
+ public void SetScreenBufferSize(short x, short y)
+ {
+ COORD c = new COORD();
+ c.X = x;
+ c.Y = y;
+ this.consoleProperties.dwScreenBufferSize = c;
+ }
+
+ public void SetWindowSize(short x, short y)
+ {
+ COORD c = new COORD();
+ c.X = x;
+ c.Y = y;
+ this.consoleProperties.dwWindowSize = c;
+ }
+
+ // This does more than console colors
+ private void SetConsoleProperties()
+ {
+ IntPtr consoleProperties = Marshal.AllocCoTaskMem(this.consoleProperties.cbSize);
+ Marshal.StructureToPtr(this.consoleProperties, consoleProperties, true);
+ ((IShellLinkDataList)this.shellLink).RemoveDataBlock(0xA0000002);
+ ((IShellLinkDataList)this.shellLink).AddDataBlock(consoleProperties);
+ }
+ }
+}
\ No newline at end of file
diff --git a/setup/azurecmd.wxs b/setup/azurecmd.wxs
new file mode 100644
index 000000000000..fd9a98bbd475
--- /dev/null
+++ b/setup/azurecmd.wxs
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ < "3.0")]]>
+
+
+
+
+
+ Installed OR NETFRAMEWORK40FULL OR NETFRAMEWORK40CLIENT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NOT Installed
+ NOT Installed
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi
new file mode 100644
index 000000000000..a32a2abc0bf9
--- /dev/null
+++ b/setup/azurecmdfiles.wxi
@@ -0,0 +1,2615 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/azurepowershell.sln b/setup/azurepowershell.sln
new file mode 100644
index 000000000000..a5d4bc722dc8
--- /dev/null
+++ b/setup/azurepowershell.sln
@@ -0,0 +1,30 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "azurepowershell", "azurepowershell.wixproj", "{36D6E303-E057-4963-A093-C7AAE0FD92B3}"
+ ProjectSection(ProjectDependencies) = postProject
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D} = {EA5BD11B-10B3-433D-A250-92AE76669D8D}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Setup", "Setup\Setup.csproj", "{EA5BD11B-10B3-433D-A250-92AE76669D8D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {36D6E303-E057-4963-A093-C7AAE0FD92B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {36D6E303-E057-4963-A093-C7AAE0FD92B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {36D6E303-E057-4963-A093-C7AAE0FD92B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {36D6E303-E057-4963-A093-C7AAE0FD92B3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EA5BD11B-10B3-433D-A250-92AE76669D8D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/setup/azurepowershell.wixproj b/setup/azurepowershell.wixproj
new file mode 100644
index 000000000000..3aa6465bf54a
--- /dev/null
+++ b/setup/azurepowershell.wixproj
@@ -0,0 +1,64 @@
+
+
+
+ Debug
+ AnyCPU
+ 3.5
+ {36d6e303-e057-4963-a093-c7aae0fd92b3}
+ 2.0
+ AzurePowerShell
+ Package
+ $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets
+ $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets
+ AzurePowershell
+
+
+ build\$(Configuration)\
+ obj\$(Configuration)\
+ Debug
+ ICE30;ICE91;ICE64;ICE61;ICE69
+
+
+ build\$(Configuration)\
+ obj\$(Configuration)\
+ ICE30;ICE91;ICE64;ICE61;ICE69
+
+
+
+ $(WixExtDir)\WixNetFxExtension.dll
+ WixNetFxExtension
+
+
+ $(WixExtDir)\WixUtilExtension.dll
+ WixUtilExtension
+
+
+ $(WixExtDir)\WixUIExtension.dll
+ WixUIExtension
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/setup/bin/iisnode.dll b/setup/bin/iisnode.dll
new file mode 100644
index 000000000000..136b447b9b67
Binary files /dev/null and b/setup/bin/iisnode.dll differ
diff --git a/setup/bin/iisnode_schema.xml b/setup/bin/iisnode_schema.xml
new file mode 100644
index 000000000000..56ad644194ba
--- /dev/null
+++ b/setup/bin/iisnode_schema.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/media/GettingStarted.url b/setup/media/GettingStarted.url
new file mode 100644
index 000000000000..cbd76c97d341
--- /dev/null
+++ b/setup/media/GettingStarted.url
@@ -0,0 +1,5 @@
+[{000214A0-0000-0000-C000-000000000046}]
+Prop3=19,2
+[InternetShortcut]
+URL=http://go.microsoft.com/?linkid=9791397
+IDList=
diff --git a/setup/media/License.rtf b/setup/media/License.rtf
new file mode 100644
index 000000000000..fe4ca72a0de0
--- /dev/null
+++ b/setup/media/License.rtf
@@ -0,0 +1,213 @@
+{\rtf1\ansi\ansicpg936\deff0\nouicompat\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
+{\colortbl ;\red0\green0\blue255;}
+{\*\generator Riched20 6.3.9600}\viewkind4\uc1
+\pard\sl240\slmult1\f0\fs20\lang9 MICROSOFT SOFTWARE LICENSE TERMS\par
+\par
+MICROSOFT AZURE POWERSHELL \par
+\par
+These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any.\par
+\par
+BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\par
+\par
+\par
+-----------------START OF LICENSE--------------------------\par
+\par
+ Apache License\par
+ Version 2.0, January 2004\par
+ {{\field{\*\fldinst{HYPERLINK http://www.apache.org/licenses/ }}{\fldrslt{http://www.apache.org/licenses/\ul0\cf0}}}}\f0\fs20\par
+\par
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\par
+\par
+ 1. Definitions.\par
+\par
+ "License" shall mean the terms and conditions for use, reproduction,\par
+ and distribution as defined by Sections 1 through 9 of this document.\par
+\par
+ "Licensor" shall mean the copyright owner or entity authorized by\par
+ the copyright owner that is granting the License.\par
+\par
+ "Legal Entity" shall mean the union of the acting entity and all\par
+ other entities that control, are controlled by, or are under common\par
+ control with that entity. For the purposes of this definition,\par
+ "control" means (i) the power, direct or indirect, to cause the\par
+ direction or management of such entity, whether by contract or\par
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the\par
+ outstanding shares, or (iii) beneficial ownership of such entity.\par
+\par
+ "You" (or "Your") shall mean an individual or Legal Entity\par
+ exercising permissions granted by this License.\par
+\par
+ "Source" form shall mean the preferred form for making modifications,\par
+ including but not limited to software source code, documentation\par
+ source, and configuration files.\par
+\par
+ "Object" form shall mean any form resulting from mechanical\par
+ transformation or translation of a Source form, including but\par
+ not limited to compiled object code, generated documentation,\par
+ and conversions to other media types.\par
+\par
+ "Work" shall mean the work of authorship, whether in Source or\par
+ Object form, made available under the License, as indicated by a\par
+ copyright notice that is included in or attached to the work\par
+ (an example is provided in the Appendix below).\par
+\par
+ "Derivative Works" shall mean any work, whether in Source or Object\par
+ form, that is based on (or derived from) the Work and for which the\par
+ editorial revisions, annotations, elaborations, or other modifications\par
+ represent, as a whole, an original work of authorship. For the purposes\par
+ of this License, Derivative Works shall not include works that remain\par
+ separable from, or merely link (or bind by name) to the interfaces of,\par
+ the Work and Derivative Works thereof.\par
+\par
+ "Contribution" shall mean any work of authorship, including\par
+ the original version of the Work and any modifications or additions\par
+ to that Work or Derivative Works thereof, that is intentionally\par
+ submitted to Licensor for inclusion in the Work by the copyright owner\par
+ or by an individual or Legal Entity authorized to submit on behalf of\par
+ the copyright owner. For the purposes of this definition, "submitted"\par
+ means any form of electronic, verbal, or written communication sent\par
+ to the Licensor or its representatives, including but not limited to\par
+ communication on electronic mailing lists, source code control systems,\par
+ and issue tracking systems that are managed by, or on behalf of, the\par
+ Licensor for the purpose of discussing and improving the Work, but\par
+ excluding communication that is conspicuously marked or otherwise\par
+ designated in writing by the copyright owner as "Not a Contribution."\par
+\par
+ "Contributor" shall mean Licensor and any individual or Legal Entity\par
+ on behalf of whom a Contribution has been received by Licensor and\par
+ subsequently incorporated within the Work.\par
+\par
+ 2. Grant of Copyright License. Subject to the terms and conditions of\par
+ this License, each Contributor hereby grants to You a perpetual,\par
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable\par
+ copyright license to reproduce, prepare Derivative Works of,\par
+ publicly display, publicly perform, sublicense, and distribute the\par
+ Work and such Derivative Works in Source or Object form.\par
+\par
+ 3. Grant of Patent License. Subject to the terms and conditions of\par
+ this License, each Contributor hereby grants to You a perpetual,\par
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable\par
+ (except as stated in this section) patent license to make, have made,\par
+ use, offer to sell, sell, import, and otherwise transfer the Work,\par
+ where such license applies only to those patent claims licensable\par
+ by such Contributor that are necessarily infringed by their\par
+ Contribution(s) alone or by combination of their Contribution(s)\par
+ with the Work to which such Contribution(s) was submitted. If You\par
+ institute patent litigation against any entity (including a\par
+ cross-claim or counterclaim in a lawsuit) alleging that the Work\par
+ or a Contribution incorporated within the Work constitutes direct\par
+ or contributory patent infringement, then any patent licenses\par
+ granted to You under this License for that Work shall terminate\par
+ as of the date such litigation is filed.\par
+\par
+ 4. Redistribution. You may reproduce and distribute copies of the\par
+ Work or Derivative Works thereof in any medium, with or without\par
+ modifications, and in Source or Object form, provided that You\par
+ meet the following conditions:\par
+\par
+ (a) You must give any other recipients of the Work or\par
+ Derivative Works a copy of this License; and\par
+\par
+ (b) You must cause any modified files to carry prominent notices\par
+ stating that You changed the files; and\par
+\par
+ (c) You must retain, in the Source form of any Derivative Works\par
+ that You distribute, all copyright, patent, trademark, and\par
+ attribution notices from the Source form of the Work,\par
+ excluding those notices that do not pertain to any part of\par
+ the Derivative Works; and\par
+\par
+ (d) If the Work includes a "NOTICE" text file as part of its\par
+ distribution, then any Derivative Works that You distribute must\par
+ include a readable copy of the attribution notices contained\par
+ within such NOTICE file, excluding those notices that do not\par
+ pertain to any part of the Derivative Works, in at least one\par
+ of the following places: within a NOTICE text file distributed\par
+ as part of the Derivative Works; within the Source form or\par
+ documentation, if provided along with the Derivative Works; or,\par
+ within a display generated by the Derivative Works, if and\par
+ wherever such third-party notices normally appear. The contents\par
+ of the NOTICE file are for informational purposes only and\par
+ do not modify the License. You may add Your own attribution\par
+ notices within Derivative Works that You distribute, alongside\par
+ or as an addendum to the NOTICE text from the Work, provided\par
+ that such additional attribution notices cannot be construed\par
+ as modifying the License.\par
+\par
+ You may add Your own copyright statement to Your modifications and\par
+ may provide additional or different license terms and conditions\par
+ for use, reproduction, or distribution of Your modifications, or\par
+ for any such Derivative Works as a whole, provided Your use,\par
+ reproduction, and distribution of the Work otherwise complies with\par
+ the conditions stated in this License.\par
+\par
+ 5. Submission of Contributions. Unless You explicitly state otherwise,\par
+ any Contribution intentionally submitted for inclusion in the Work\par
+ by You to the Licensor shall be under the terms and conditions of\par
+ this License, without any additional terms or conditions.\par
+ Notwithstanding the above, nothing herein shall supersede or modify\par
+ the terms of any separate license agreement you may have executed\par
+ with Licensor regarding such Contributions.\par
+\par
+ 6. Trademarks. This License does not grant permission to use the trade\par
+ names, trademarks, service marks, or product names of the Licensor,\par
+ except as required for reasonable and customary use in describing the\par
+ origin of the Work and reproducing the content of the NOTICE file.\par
+\par
+ 7. Disclaimer of Warranty. Unless required by applicable law or\par
+ agreed to in writing, Licensor provides the Work (and each\par
+ Contributor provides its Contributions) on an "AS IS" BASIS,\par
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\par
+ implied, including, without limitation, any warranties or conditions\par
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\par
+ PARTICULAR PURPOSE. You are solely responsible for determining the\par
+ appropriateness of using or redistributing the Work and assume any\par
+ risks associated with Your exercise of permissions under this License.\par
+\par
+ 8. Limitation of Liability. In no event and under no legal theory,\par
+ whether in tort (including negligence), contract, or otherwise,\par
+ unless required by applicable law (such as deliberate and grossly\par
+ negligent acts) or agreed to in writing, shall any Contributor be\par
+ liable to You for damages, including any direct, indirect, special,\par
+ incidental, or consequential damages of any character arising as a\par
+ result of this License or out of the use or inability to use the\par
+ Work (including but not limited to damages for loss of goodwill,\par
+ work stoppage, computer failure or malfunction, or any and all\par
+ other commercial damages or losses), even if such Contributor\par
+ has been advised of the possibility of such damages.\par
+\par
+ 9. Accepting Warranty or Additional Liability. While redistributing\par
+ the Work or Derivative Works thereof, You may choose to offer,\par
+ and charge a fee for, acceptance of support, warranty, indemnity,\par
+ or other liability obligations and/or rights consistent with this\par
+ License. However, in accepting such obligations, You may act only\par
+ on Your own behalf and on Your sole responsibility, not on behalf\par
+ of any other Contributor, and only if You agree to indemnify,\par
+ defend, and hold each Contributor harmless for any liability\par
+ incurred by, or claims asserted against, such Contributor by reason\par
+ of your accepting any such warranty or additional liability.\par
+\par
+-------------------END OF LICENSE-------------------------------\par
+\par
+The software includes the AutoMapper library ("AutoMapper"). The MIT License set out below is provided for informational purposes only. It is not the license that governs any part of the software.\par
+\par
+----------------START OF LICENSE--------------------------------\par
+\par
+Provided for Informational Purposes Only\par
+\par
+AutoMapper\par
+\par
+The MIT License (MIT)\par
+\par
+Copyright (c) 2010 Jimmy Bogard\par
+\par
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par
+\par
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par
+\par
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par
+\par
+-------------END OF LICENSE----------------------------------------\par
+\par
+}
+
diff --git a/setup/media/WAIcon.ico b/setup/media/WAIcon.ico
new file mode 100644
index 000000000000..76425402df61
Binary files /dev/null and b/setup/media/WAIcon.ico differ
diff --git a/setup/media/bannrbmp.bmp b/setup/media/bannrbmp.bmp
new file mode 100644
index 000000000000..e115559090c4
Binary files /dev/null and b/setup/media/bannrbmp.bmp differ
diff --git a/setup/media/dlgbmp.bmp b/setup/media/dlgbmp.bmp
new file mode 100644
index 000000000000..399c62e6f1e1
Binary files /dev/null and b/setup/media/dlgbmp.bmp differ
diff --git a/src/.nuget/NuGet.Config b/src/.nuget/NuGet.Config
new file mode 100644
index 000000000000..107ede70b2c1
--- /dev/null
+++ b/src/.nuget/NuGet.Config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/.nuget/NuGet.exe b/src/.nuget/NuGet.exe
new file mode 100644
index 000000000000..c41a0d0debd8
Binary files /dev/null and b/src/.nuget/NuGet.exe differ
diff --git a/src/.nuget/NuGet.targets b/src/.nuget/NuGet.targets
new file mode 100644
index 000000000000..2d11ba558f2b
--- /dev/null
+++ b/src/.nuget/NuGet.targets
@@ -0,0 +1,153 @@
+
+
+
+ $(MSBuildProjectDirectory)\..\
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+ $([System.IO.Path]::Combine($(SolutionDir), ".nuget"))
+ $([System.IO.Path]::Combine($(ProjectDir), "packages.config"))
+ $([System.IO.Path]::Combine($(SolutionDir), "packages"))
+
+
+
+
+ $(SolutionDir).nuget
+ packages.config
+ $(SolutionDir)packages
+
+
+
+
+ $(NuGetToolsPath)\nuget.exe
+ @(PackageSource)
+
+ "$(NuGetExePath)"
+ mono --runtime=v4.0.30319 $(NuGetExePath)
+
+ $(TargetDir.Trim('\\'))
+
+ -RequireConsent
+
+ $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -o "$(PackagesDir)"
+ $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols
+
+
+
+ RestorePackages;
+ $(BuildDependsOn);
+
+
+
+
+ $(BuildDependsOn);
+ BuildPackage;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AzurePowershell.sln b/src/AzurePowershell.sln
new file mode 100644
index 000000000000..d06e75409380
--- /dev/null
+++ b/src/AzurePowershell.sln
@@ -0,0 +1,382 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30501.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8531411A-0137-4E27-9C5E-49E07C245048}"
+ ProjectSection(SolutionItems) = preProject
+ local.runsettings = local.runsettings
+ Local.testsettings = Local.testsettings
+ Local.x64.testsettings = Local.x64.testsettings
+ UnitTest.testsettings = UnitTest.testsettings
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands", "ServiceManagement\Services\Commands\Commands.csproj", "{CD5AA507-F5EF-473D-855B-84B91A1ABE54}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E1F5201D-6067-430E-B303-4E367652991B} = {E1F5201D-6067-430E-B303-4E367652991B}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Test", "ServiceManagement\Services\Commands.Test\Commands.Test.csproj", "{B7FD03F6-98BC-4F54-9A14-0455E579FCD4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.SqlDatabase", "ServiceManagement\Sql\Commands.SqlDatabase\Commands.SqlDatabase.csproj", "{DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.SqlDatabase.Test", "ServiceManagement\Sql\Commands.SqlDatabase.Test\Commands.SqlDatabase.Test.csproj", "{37455286-D8A7-4E0C-8B4D-C517D20C641A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage", "ServiceManagement\Storage\Commands.Storage\Commands.Storage.csproj", "{08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage.Test", "ServiceManagement\Storage\Commands.Storage.Test\Commands.Storage.Test.csproj", "{D6F470A6-7395-4B8B-9D29-44DF0EC8F624}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ScenarioTest", "Common\Commands.ScenarioTest\Commands.ScenarioTest.csproj", "{A3965B66-5A3E-4B8C-9574-28E5958D4828}"
+ ProjectSection(ProjectDependencies) = postProject
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54} = {CD5AA507-F5EF-473D-855B-84B91A1ABE54}
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA} = {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ServiceManagement", "ServiceManagement\Compute\Commands.ServiceManagement\Commands.ServiceManagement.csproj", "{E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ServiceManagement.Test", "ServiceManagement\Compute\Commands.ServiceManagement.Test\Commands.ServiceManagement.Test.csproj", "{58A78F29-8C0C-4A5E-893E-3953C0F29C8A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21} = {98B10548-DF97-4FB1-8D82-2A12945D4F21}
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A} = {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4} = {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737} = {FDB897BD-FCB4-44A1-8D66-AC99F22EC737}
+ {E895BBDA-0B06-46AB-B909-9B97B3ECE47E} = {E895BBDA-0B06-46AB-B909-9B97B3ECE47E}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sync", "ServiceManagement\Compute\Sync\Sync.csproj", "{73820CBC-F4EB-4C5E-B4F0-CC4A93FBF157}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VhdManagement", "ServiceManagement\Compute\VhdManagement\VhdManagement.csproj", "{80496B7B-068A-4A1E-B0BB-4B1FFF3FA616}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Utilities", "ServiceManagement\Services\Commands.Utilities\Commands.Utilities.csproj", "{4900EC4E-8DEB-4412-9108-0BC52F81D457}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Test.Utilities", "ServiceManagement\Services\Commands.Test.Utilities\Commands.Test.Utilities.csproj", "{BC420543-C04E-4BF3-96E1-CD81B823BDD7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage.MsTestLib", "ServiceManagement\Storage\Commands.Storage.MsTestLib\Commands.Storage.MsTestLib.csproj", "{CE97967B-7479-43B9-9561-776232AC5D47}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage.StorageTestLib", "ServiceManagement\Storage\Commands.Storage.StorageTestLib\Commands.Storage.StorageTestLib.csproj", "{0A513849-2690-4D07-8DE7-0ACE39645D12}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage.ScenarioTest", "ServiceManagement\Storage\Commands.Storage.ScenarioTest\Commands.Storage.ScenarioTest.csproj", "{4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Storage.MsTest2", "ServiceManagement\Storage\Commands.Storage.MsTest2\Commands.Storage.MsTest2.csproj", "{9D5A40CA-5594-4F5C-8230-7ADF7CC0558E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ServiceManagement.PlatformImageRepository", "ServiceManagement\Compute\Commands.ServiceManagement.PlatformImageRepository\Commands.ServiceManagement.PlatformImageRepository.csproj", "{6478FA8B-3801-4863-8591-87F0855D5C82}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ServiceManagement.Preview", "ServiceManagement\Compute\Commands.ServiceManagement.Preview\Commands.ServiceManagement.Preview.csproj", "{E895BBDA-0B06-46AB-B909-9B97B3ECE47E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6478FA8B-3801-4863-8591-87F0855D5C82} = {6478FA8B-3801-4863-8591-87F0855D5C82}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ExpressRoute", "ServiceManagement\ExpressRoute\Commands.ExpressRoute\Commands.ExpressRoute.csproj", "{45C2D687-E0CE-4C97-B731-335834DC2BF2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common", "Common\Commands.Common\Commands.Common.csproj", "{5EE72C53-1720-4309-B54B-5FB79703195F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common.Storage", "Common\Commands.Common.Storage\Commands.Common.Storage.csproj", "{65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common.Test", "Common\Commands.Common.Test\Commands.Common.Test.csproj", "{3B48A77B-5956-4A62-9081-92BA04B02B27}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{95C16AED-FD57-42A0-86C3-2CF4300A4817}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Resources", "ResourceManager\Resources\Commands.Resources\Commands.Resources.csproj", "{E1F5201D-6067-430E-B303-4E367652991B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Resources.Test", "ResourceManager\Resources\Commands.Resources.Test\Commands.Resources.Test.csproj", "{4C2FE49A-09E1-4979-AD46-CD64FD04C8F7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {D470E50A-9607-48D6-A924-4F9F86502704} = {D470E50A-9607-48D6-A924-4F9F86502704}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.TrafficManager", "ServiceManagement\TrafficManager\Commands.TrafficManager\Commands.TrafficManager.csproj", "{94E96A5C-B5AD-4E10-B13A-3BC16D102AED}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ManagedCache", "ServiceManagement\ManagedCache\Commands.ManagedCache\Commands.ManagedCache.csproj", "{46C06ED8-43D9-41FD-B73B-41547D9C04E1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ManagedCache.Test", "ServiceManagement\ManagedCache\Commands.ManagedCache.Test\Commands.ManagedCache.Test.csproj", "{374D4000-DEDE-4995-9B63-E3B9FE0C4D29}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Profile", "Common\Commands.Profile\Commands.Profile.csproj", "{C60342B1-47D3-4A0E-8081-9B97CE60B7AF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Automation", "ServiceManagement\Automation\Commands.Automation\Commands.Automation.csproj", "{47CD7E95-5330-4384-ABCE-2C267C57085C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Automation.Test", "ServiceManagement\Automation\Commands.Automation.Test\Commands.Automation.Test.csproj", "{127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.TrafficManager.Test", "ServiceManagement\TrafficManager\Commands.TrafficManager.Test\Commands.TrafficManager.Test.csproj", "{84F99CBD-5B86-4428-B263-135B2F67F512}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.HDInsight", "ServiceManagement\HDInsight\Commands.HDInsight\Commands.HDInsight.csproj", "{137D404A-865A-43DB-930C-6DA67DA048DF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.HDInsight.Test", "ServiceManagement\HDInsight\Commands.HDInsight.Test\Commands.HDInsight.Test.csproj", "{7E8D2555-2DDD-4757-974F-D5FFD0647671}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Tags", "ResourceManager\Tags\Commands.Tags\Commands.Tags.csproj", "{2493A8F7-1949-4F29-8D53-9D459046C3B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ScenarioTests.Common", "Common\Commands.ScenarioTests.Common\Commands.ScenarioTests.Common.csproj", "{C1BDA476-A5CC-4394-914D-48B0EC31A710}"
+ ProjectSection(ProjectDependencies) = postProject
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54} = {CD5AA507-F5EF-473D-855B-84B91A1ABE54}
+ {E1F5201D-6067-430E-B303-4E367652991B} = {E1F5201D-6067-430E-B303-4E367652991B}
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA} = {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21} = {98B10548-DF97-4FB1-8D82-2A12945D4F21}
+ {137D404A-865A-43DB-930C-6DA67DA048DF} = {137D404A-865A-43DB-930C-6DA67DA048DF}
+ {4900EC4E-8DEB-4412-9108-0BC52F81D457} = {4900EC4E-8DEB-4412-9108-0BC52F81D457}
+ {94E96A5C-B5AD-4E10-B13A-3BC16D102AED} = {94E96A5C-B5AD-4E10-B13A-3BC16D102AED}
+ {45C2D687-E0CE-4C97-B731-335834DC2BF2} = {45C2D687-E0CE-4C97-B731-335834DC2BF2}
+ {47CD7E95-5330-4384-ABCE-2C267C57085C} = {47CD7E95-5330-4384-ABCE-2C267C57085C}
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A} = {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF} = {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}
+ {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F} = {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4} = {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}
+ {46C06ED8-43D9-41FD-B73B-41547D9C04E1} = {46C06ED8-43D9-41FD-B73B-41547D9C04E1}
+ {2493A8F7-1949-4F29-8D53-9D459046C3B8} = {2493A8F7-1949-4F29-8D53-9D459046C3B8}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Sql", "ResourceManager\Sql\Commands.Sql\Commands.Sql.csproj", "{69ED499E-6F3C-488F-86B8-B74CFDA4D47E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.DataFactories", "ResourceManager\DataFactories\Commands.DataFactories\Commands.DataFactories.csproj", "{9577252E-0A6B-4D61-86E8-95F7F309A987}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.DataFactories.Test", "ResourceManager\DataFactories\Commands.DataFactories.Test\Commands.DataFactories.Test.csproj", "{D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Sql.Test", "ResourceManager\Sql\Commands.Sql.Test\Commands.Sql.Test.csproj", "{56ED8C97-53B9-4DF6-ACB5-7E6800105BF8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ServiceManagement.Extensions.Test", "ServiceManagement\Compute\Commands.ServiceManagement.Extensions.Test\Commands.ServiceManagement.Extensions.Test.csproj", "{7A9D7758-A1AB-4BE8-BD09-3FAF446314F2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.RedisCache", "ResourceManager\RedisCache\Commands.RedisCache\Commands.RedisCache.csproj", "{C972E3EF-4461-4758-BA31-93E0947B1253}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.RedisCache.Test", "ResourceManager\RedisCache\Commands.RedisCache.Test\Commands.RedisCache.Test.csproj", "{4AE5705F-62CF-461D-B72E-DD9DCD9B3609}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Batch", "ResourceManager\Batch\Commands.Batch\Commands.Batch.csproj", "{D470E50A-9607-48D6-A924-4F9F86502704}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Batch.Test", "ResourceManager\Batch\Commands.Batch.Test\Commands.Batch.Test.csproj", "{F4ABAD68-64A5-4B23-B09C-42559A7524DE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Network", "ServiceManagement\Network\Commands.Network\Commands.Network.csproj", "{40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Network.Test", "ServiceManagement\Network\Commands.Network.Test\Commands.Network.Test.csproj", "{FDB897BD-FCB4-44A1-8D66-AC99F22EC737}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.RecoveryServices", "ServiceManagement\RecoveryServices\Commands.RecoveryServices\Commands.RecoveryServices.csproj", "{98B10548-DF97-4FB1-8D82-2A12945D4F21}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.RecoveryServices.Test", "ServiceManagement\RecoveryServices\Commands.RecoveryServices.Test\Commands.RecoveryServices.Test.csproj", "{A415F75B-EB6A-49A6-934E-5BA71B83D6EB}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD5AA507-F5EF-473D-855B-84B91A1ABE54}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7FD03F6-98BC-4F54-9A14-0455E579FCD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7FD03F6-98BC-4F54-9A14-0455E579FCD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7FD03F6-98BC-4F54-9A14-0455E579FCD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7FD03F6-98BC-4F54-9A14-0455E579FCD4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DDF5D225-C9C5-42B7-BDB5-2C3646E479AA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37455286-D8A7-4E0C-8B4D-C517D20C641A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37455286-D8A7-4E0C-8B4D-C517D20C641A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37455286-D8A7-4E0C-8B4D-C517D20C641A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37455286-D8A7-4E0C-8B4D-C517D20C641A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08CF7DA7-0392-4A19-B79B-E1FF67CDB81A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D6F470A6-7395-4B8B-9D29-44DF0EC8F624}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D6F470A6-7395-4B8B-9D29-44DF0EC8F624}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D6F470A6-7395-4B8B-9D29-44DF0EC8F624}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D6F470A6-7395-4B8B-9D29-44DF0EC8F624}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1CA72BA-8374-45F6-904D-FD34ECDF5B6F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58A78F29-8C0C-4A5E-893E-3953C0F29C8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58A78F29-8C0C-4A5E-893E-3953C0F29C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58A78F29-8C0C-4A5E-893E-3953C0F29C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58A78F29-8C0C-4A5E-893E-3953C0F29C8A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {73820CBC-F4EB-4C5E-B4F0-CC4A93FBF157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {73820CBC-F4EB-4C5E-B4F0-CC4A93FBF157}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {73820CBC-F4EB-4C5E-B4F0-CC4A93FBF157}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {73820CBC-F4EB-4C5E-B4F0-CC4A93FBF157}.Release|Any CPU.Build.0 = Release|Any CPU
+ {80496B7B-068A-4A1E-B0BB-4B1FFF3FA616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {80496B7B-068A-4A1E-B0BB-4B1FFF3FA616}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {80496B7B-068A-4A1E-B0BB-4B1FFF3FA616}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {80496B7B-068A-4A1E-B0BB-4B1FFF3FA616}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4900EC4E-8DEB-4412-9108-0BC52F81D457}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4900EC4E-8DEB-4412-9108-0BC52F81D457}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4900EC4E-8DEB-4412-9108-0BC52F81D457}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4900EC4E-8DEB-4412-9108-0BC52F81D457}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC420543-C04E-4BF3-96E1-CD81B823BDD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC420543-C04E-4BF3-96E1-CD81B823BDD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC420543-C04E-4BF3-96E1-CD81B823BDD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC420543-C04E-4BF3-96E1-CD81B823BDD7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CE97967B-7479-43B9-9561-776232AC5D47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CE97967B-7479-43B9-9561-776232AC5D47}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CE97967B-7479-43B9-9561-776232AC5D47}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CE97967B-7479-43B9-9561-776232AC5D47}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0A513849-2690-4D07-8DE7-0ACE39645D12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0A513849-2690-4D07-8DE7-0ACE39645D12}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0A513849-2690-4D07-8DE7-0ACE39645D12}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0A513849-2690-4D07-8DE7-0ACE39645D12}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9D5A40CA-5594-4F5C-8230-7ADF7CC0558E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D5A40CA-5594-4F5C-8230-7ADF7CC0558E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9D5A40CA-5594-4F5C-8230-7ADF7CC0558E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9D5A40CA-5594-4F5C-8230-7ADF7CC0558E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6478FA8B-3801-4863-8591-87F0855D5C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6478FA8B-3801-4863-8591-87F0855D5C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6478FA8B-3801-4863-8591-87F0855D5C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6478FA8B-3801-4863-8591-87F0855D5C82}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E895BBDA-0B06-46AB-B909-9B97B3ECE47E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E895BBDA-0B06-46AB-B909-9B97B3ECE47E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E895BBDA-0B06-46AB-B909-9B97B3ECE47E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E895BBDA-0B06-46AB-B909-9B97B3ECE47E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {45C2D687-E0CE-4C97-B731-335834DC2BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45C2D687-E0CE-4C97-B731-335834DC2BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45C2D687-E0CE-4C97-B731-335834DC2BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45C2D687-E0CE-4C97-B731-335834DC2BF2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1F5201D-6067-430E-B303-4E367652991B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1F5201D-6067-430E-B303-4E367652991B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1F5201D-6067-430E-B303-4E367652991B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1F5201D-6067-430E-B303-4E367652991B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C2FE49A-09E1-4979-AD46-CD64FD04C8F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C2FE49A-09E1-4979-AD46-CD64FD04C8F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C2FE49A-09E1-4979-AD46-CD64FD04C8F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C2FE49A-09E1-4979-AD46-CD64FD04C8F7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {94E96A5C-B5AD-4E10-B13A-3BC16D102AED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {94E96A5C-B5AD-4E10-B13A-3BC16D102AED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {94E96A5C-B5AD-4E10-B13A-3BC16D102AED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {94E96A5C-B5AD-4E10-B13A-3BC16D102AED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {46C06ED8-43D9-41FD-B73B-41547D9C04E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {46C06ED8-43D9-41FD-B73B-41547D9C04E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {46C06ED8-43D9-41FD-B73B-41547D9C04E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {46C06ED8-43D9-41FD-B73B-41547D9C04E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {374D4000-DEDE-4995-9B63-E3B9FE0C4D29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {374D4000-DEDE-4995-9B63-E3B9FE0C4D29}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {374D4000-DEDE-4995-9B63-E3B9FE0C4D29}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {374D4000-DEDE-4995-9B63-E3B9FE0C4D29}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {47CD7E95-5330-4384-ABCE-2C267C57085C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {47CD7E95-5330-4384-ABCE-2C267C57085C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {47CD7E95-5330-4384-ABCE-2C267C57085C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {47CD7E95-5330-4384-ABCE-2C267C57085C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {84F99CBD-5B86-4428-B263-135B2F67F512}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {84F99CBD-5B86-4428-B263-135B2F67F512}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {84F99CBD-5B86-4428-B263-135B2F67F512}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {84F99CBD-5B86-4428-B263-135B2F67F512}.Release|Any CPU.Build.0 = Release|Any CPU
+ {137D404A-865A-43DB-930C-6DA67DA048DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {137D404A-865A-43DB-930C-6DA67DA048DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {137D404A-865A-43DB-930C-6DA67DA048DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {137D404A-865A-43DB-930C-6DA67DA048DF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7E8D2555-2DDD-4757-974F-D5FFD0647671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E8D2555-2DDD-4757-974F-D5FFD0647671}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7E8D2555-2DDD-4757-974F-D5FFD0647671}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7E8D2555-2DDD-4757-974F-D5FFD0647671}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2493A8F7-1949-4F29-8D53-9D459046C3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2493A8F7-1949-4F29-8D53-9D459046C3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2493A8F7-1949-4F29-8D53-9D459046C3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2493A8F7-1949-4F29-8D53-9D459046C3B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C1BDA476-A5CC-4394-914D-48B0EC31A710}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C1BDA476-A5CC-4394-914D-48B0EC31A710}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C1BDA476-A5CC-4394-914D-48B0EC31A710}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C1BDA476-A5CC-4394-914D-48B0EC31A710}.Release|Any CPU.Build.0 = Release|Any CPU
+ {69ED499E-6F3C-488F-86B8-B74CFDA4D47E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {69ED499E-6F3C-488F-86B8-B74CFDA4D47E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {69ED499E-6F3C-488F-86B8-B74CFDA4D47E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {69ED499E-6F3C-488F-86B8-B74CFDA4D47E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9577252E-0A6B-4D61-86E8-95F7F309A987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9577252E-0A6B-4D61-86E8-95F7F309A987}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9577252E-0A6B-4D61-86E8-95F7F309A987}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9577252E-0A6B-4D61-86E8-95F7F309A987}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {56ED8C97-53B9-4DF6-ACB5-7E6800105BF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {56ED8C97-53B9-4DF6-ACB5-7E6800105BF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {56ED8C97-53B9-4DF6-ACB5-7E6800105BF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {56ED8C97-53B9-4DF6-ACB5-7E6800105BF8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7A9D7758-A1AB-4BE8-BD09-3FAF446314F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A9D7758-A1AB-4BE8-BD09-3FAF446314F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7A9D7758-A1AB-4BE8-BD09-3FAF446314F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7A9D7758-A1AB-4BE8-BD09-3FAF446314F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C972E3EF-4461-4758-BA31-93E0947B1253}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C972E3EF-4461-4758-BA31-93E0947B1253}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C972E3EF-4461-4758-BA31-93E0947B1253}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C972E3EF-4461-4758-BA31-93E0947B1253}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4AE5705F-62CF-461D-B72E-DD9DCD9B3609}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4AE5705F-62CF-461D-B72E-DD9DCD9B3609}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4AE5705F-62CF-461D-B72E-DD9DCD9B3609}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4AE5705F-62CF-461D-B72E-DD9DCD9B3609}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D470E50A-9607-48D6-A924-4F9F86502704}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D470E50A-9607-48D6-A924-4F9F86502704}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D470E50A-9607-48D6-A924-4F9F86502704}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D470E50A-9607-48D6-A924-4F9F86502704}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F4ABAD68-64A5-4B23-B09C-42559A7524DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4ABAD68-64A5-4B23-B09C-42559A7524DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4ABAD68-64A5-4B23-B09C-42559A7524DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4ABAD68-64A5-4B23-B09C-42559A7524DE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {40FEE0BB-FD45-4EFC-85BC-0D602A6892C4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737}.Release|Any CPU.Build.0 = Release|Any CPU
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {98B10548-DF97-4FB1-8D82-2A12945D4F21}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A415F75B-EB6A-49A6-934E-5BA71B83D6EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A415F75B-EB6A-49A6-934E-5BA71B83D6EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A415F75B-EB6A-49A6-934E-5BA71B83D6EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A415F75B-EB6A-49A6-934E-5BA71B83D6EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {B7FD03F6-98BC-4F54-9A14-0455E579FCD4} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {37455286-D8A7-4E0C-8B4D-C517D20C641A} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {D6F470A6-7395-4B8B-9D29-44DF0EC8F624} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {58A78F29-8C0C-4A5E-893E-3953C0F29C8A} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {BC420543-C04E-4BF3-96E1-CD81B823BDD7} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {CE97967B-7479-43B9-9561-776232AC5D47} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {0A513849-2690-4D07-8DE7-0ACE39645D12} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {4BC0E3D3-6EDD-43AA-8F15-DCFED8ACC93D} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {9D5A40CA-5594-4F5C-8230-7ADF7CC0558E} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {3B48A77B-5956-4A62-9081-92BA04B02B27} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {4C2FE49A-09E1-4979-AD46-CD64FD04C8F7} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {374D4000-DEDE-4995-9B63-E3B9FE0C4D29} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {127D0D51-FDEA-4E1A-8CD8-34DEB5C2F7F6} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {84F99CBD-5B86-4428-B263-135B2F67F512} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {7E8D2555-2DDD-4757-974F-D5FFD0647671} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {C1BDA476-A5CC-4394-914D-48B0EC31A710} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {D4EDAD6F-6A1D-4295-9A88-CD3F69EAD42B} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {56ED8C97-53B9-4DF6-ACB5-7E6800105BF8} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {7A9D7758-A1AB-4BE8-BD09-3FAF446314F2} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {4AE5705F-62CF-461D-B72E-DD9DCD9B3609} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {F4ABAD68-64A5-4B23-B09C-42559A7524DE} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {FDB897BD-FCB4-44A1-8D66-AC99F22EC737} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ {A415F75B-EB6A-49A6-934E-5BA71B83D6EB} = {95C16AED-FD57-42A0-86C3-2CF4300A4817}
+ EndGlobalSection
+EndGlobal
diff --git a/src/AzureRT.testsettings b/src/AzureRT.testsettings
new file mode 100644
index 000000000000..9614008c91be
--- /dev/null
+++ b/src/AzureRT.testsettings
@@ -0,0 +1,15 @@
+
+
+ These are test settings for AzureRT test run.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Common.sln b/src/Common.sln
new file mode 100644
index 000000000000..2a66f4292cd6
--- /dev/null
+++ b/src/Common.sln
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30501.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common", "Common\Commands.Common\Commands.Common.csproj", "{5EE72C53-1720-4309-B54B-5FB79703195F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common.Storage", "Common\Commands.Common.Storage\Commands.Common.Storage.csproj", "{65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Common.Test", "Common\Commands.Common.Test\Commands.Common.Test.csproj", "{3B48A77B-5956-4A62-9081-92BA04B02B27}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.Profile", "Common\Commands.Profile\Commands.Profile.csproj", "{C60342B1-47D3-4A0E-8081-9B97CE60B7AF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commands.ScenarioTest", "Common\Commands.ScenarioTest\Commands.ScenarioTest.csproj", "{A3965B66-5A3E-4B8C-9574-28E5958D4828}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5EE72C53-1720-4309-B54B-5FB79703195F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C60342B1-47D3-4A0E-8081-9B97CE60B7AF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3965B66-5A3E-4B8C-9574-28E5958D4828}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/Common/Commands.Common.Storage/AzureStorageContext.cs b/src/Common/Commands.Common.Storage/AzureStorageContext.cs
new file mode 100644
index 000000000000..954bfc5df548
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/AzureStorageContext.cs
@@ -0,0 +1,167 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System;
+using Microsoft.WindowsAzure.Commands.Common.Storage.Properties;
+using Microsoft.WindowsAzure.Storage;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage
+{
+ ///
+ /// Storage context
+ ///
+ public class AzureStorageContext
+ {
+ private static AzureStorageContext emptyContextInstance = new AzureStorageContext();
+
+ ///
+ /// Storage account name used in this context
+ ///
+ public string StorageAccountName { get; private set; }
+
+ ///
+ /// Blob end point of the storage context
+ ///
+ public string BlobEndPoint { get; private set; }
+
+ ///
+ /// Table end point of the storage context
+ ///
+ public string TableEndPoint { get; private set; }
+
+ ///
+ /// Queue end point of the storage context
+ ///
+ public string QueueEndPoint { get; private set; }
+
+ ///
+ /// Self reference, it could enable New-AzureStorageContext can be used in pipeline
+ ///
+ public AzureStorageContext Context { get; private set; }
+
+ ///
+ /// Name place holder, and force pipeline to ignore this property
+ ///
+ public string Name { get; private set; }
+
+ ///
+ /// Storage account in context
+ ///
+ public CloudStorageAccount StorageAccount { get; private set; }
+
+ ///
+ /// Endpoint suffix (everything after "table.", "blob." or "queue.")
+ ///
+ ///
+ /// This will return an empty string if the endpoints are not correctly set.
+ ///
+ public string EndPointSuffix
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(BlobEndPoint) || string.IsNullOrEmpty(TableEndPoint))
+ {
+ return string.Empty;
+ }
+
+ string suffix;
+
+ if (StorageAccountName.EndsWith("blob", StringComparison.InvariantCultureIgnoreCase))
+ {
+ // Cannot use the blob endpoint if the account name ends with blob...
+ // However it is OK if "blob" is in the account name but not as a suffix
+ int tableIndex = TableEndPoint.IndexOf("table.", 0, StringComparison.InvariantCultureIgnoreCase);
+ if (tableIndex <= 0)
+ {
+ suffix = string.Empty;
+ }
+ else
+ {
+ suffix = TableEndPoint.Substring(tableIndex + "table.".Length);
+ }
+ }
+ else
+ {
+ int blobIndex = BlobEndPoint.IndexOf("blob.", 0, StringComparison.InvariantCultureIgnoreCase);
+ if (blobIndex <= 0)
+ {
+ suffix = string.Empty;
+ }
+ else
+ {
+ suffix = BlobEndPoint.Substring(blobIndex + "blob.".Length);
+ }
+ }
+
+ return suffix;
+ }
+ }
+
+ ///
+ /// Create a storage context usign cloud storage account
+ ///
+ /// cloud storage account
+ public AzureStorageContext(CloudStorageAccount account)
+ {
+ StorageAccount = account;
+
+ if (account.BlobEndpoint != null)
+ {
+ BlobEndPoint = account.BlobEndpoint.ToString();
+ }
+
+ if (account.TableEndpoint != null)
+ {
+ TableEndPoint = account.TableEndpoint.ToString();
+ }
+
+ if (account.QueueEndpoint != null)
+ {
+ QueueEndPoint = account.QueueEndpoint.ToString();
+ }
+
+ StorageAccountName = account.Credentials.AccountName;
+ Context = this;
+ Name = String.Empty;
+
+ if (string.IsNullOrEmpty(StorageAccountName))
+ {
+ if (account.Credentials.IsSAS)
+ {
+ StorageAccountName = Resources.SasTokenAccountName;
+ }
+ else
+ {
+ StorageAccountName = Resources.AnonymousAccountName;
+ }
+ }
+ }
+
+ ///
+ /// Proivides a private constructor for building empty instance which
+ /// contains no account information.
+ ///
+ private AzureStorageContext()
+ {
+ }
+
+ public static AzureStorageContext EmptyContextInstance
+ {
+ get
+ {
+ return emptyContextInstance;
+ }
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Storage/BlobUploadParameters.cs b/src/Common/Commands.Common.Storage/BlobUploadParameters.cs
new file mode 100644
index 000000000000..8618681c187a
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/BlobUploadParameters.cs
@@ -0,0 +1,38 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using Microsoft.WindowsAzure.Storage.Blob;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage
+{
+ public class BlobUploadParameters
+ {
+ public string StorageName {get; set;}
+ public string FileLocalPath { get; set; }
+ public string FileRemoteName { get; set; }
+ public string ContainerName { get; set; }
+ public bool ContainerPublic { get; set; }
+ public bool OverrideIfExists { get; set; }
+ public int SasTokenDurationInHours { get; set; }
+ public BlobRequestOptions BlobRequestOptions { get; set; }
+
+ public BlobUploadParameters()
+ {
+ ContainerPublic = false;
+ ContainerName = "mydeployments";
+ SasTokenDurationInHours = 24;
+ OverrideIfExists = false;
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Storage/Commands.Common.Storage.csproj b/src/Common/Commands.Common.Storage/Commands.Common.Storage.csproj
new file mode 100644
index 000000000000..43a11a618f7c
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/Commands.Common.Storage.csproj
@@ -0,0 +1,155 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {65C3A86A-716D-4E7D-AB67-1DB00B3BF72D}
+ Library
+ Properties
+ Microsoft.WindowsAzure.Commands.Common.Storage
+ Microsoft.WindowsAzure.Commands.Common.Storage
+ v4.5
+ 512
+
+ ..\..\
+ true
+ /assemblyCompareMode:StrongNameIgnoringVersion
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;TRACE
+ prompt
+ 4
+ true
+ true
+ false
+
+
+ bin\Release
+ TRACE;SIGN
+ true
+ pdbonly
+ AnyCPU
+ bin\Release\Management.Utilities.dll.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets
+ ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules
+ true
+ MSSharedLibKey.snk
+ true
+ true
+ false
+
+
+
+ ..\..\packages\Microsoft.Data.Edm.5.6.0\lib\net40\Microsoft.Data.Edm.dll
+
+
+ ..\..\packages\Microsoft.Data.OData.5.6.0\lib\net40\Microsoft.Data.OData.dll
+
+
+ ..\..\packages\Microsoft.Data.Services.Client.5.6.0\lib\net40\Microsoft.Data.Services.Client.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Common.1.4.0\lib\net45\Microsoft.WindowsAzure.Common.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Common.1.4.0\lib\net45\Microsoft.WindowsAzure.Common.NetFramework.dll
+
+
+ ..\..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Management.Storage.3.1.0\lib\net40\Microsoft.WindowsAzure.Management.Storage.dll
+
+
+ False
+ ..\..\packages\WindowsAzure.Storage.4.0.0\lib\net40\Microsoft.WindowsAzure.Storage.dll
+
+
+ ..\..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll
+ True
+
+
+
+
+
+
+
+ False
+ ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Extensions.dll
+
+
+ False
+ ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Primitives.dll
+
+
+
+
+ ..\..\packages\System.Spatial.5.6.0\lib\net40\System.Spatial.dll
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+
+
+
+ {5ee72c53-1720-4309-b54b-5fb79703195f}
+ Commands.Common
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Storage/IStorageClientWrapper.cs b/src/Common/Commands.Common.Storage/IStorageClientWrapper.cs
new file mode 100644
index 000000000000..e29485436fc4
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/IStorageClientWrapper.cs
@@ -0,0 +1,29 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+
+using System;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage
+{
+ public interface IStorageClientWrapper
+ {
+ void DeletePackageFromBlob(
+ string storageName,
+ Uri packageUri);
+
+ Uri UploadFileToBlob(
+ BlobUploadParameters parameters);
+ }
+}
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Storage/MSSharedLibKey.snk b/src/Common/Commands.Common.Storage/MSSharedLibKey.snk
new file mode 100644
index 000000000000..695f1b38774e
Binary files /dev/null and b/src/Common/Commands.Common.Storage/MSSharedLibKey.snk differ
diff --git a/src/Common/Commands.Common.Storage/Properties/AssemblyInfo.cs b/src/Common/Commands.Common.Storage/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000000..e03883414b6c
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/Properties/AssemblyInfo.cs
@@ -0,0 +1,28 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Microsoft Azure Powershell - Common Storage Library")]
+[assembly: AssemblyCompany(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyCompany)]
+[assembly: AssemblyProduct(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyProduct)]
+[assembly: AssemblyCopyright(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyCopyright)]
+
+[assembly: ComVisible(false)]
+[assembly: CLSCompliant(false)]
+[assembly: Guid("c565107e-98a9-4703-85cd-a7efc3d8da7b")]
+[assembly: AssemblyVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyVersion)]
+[assembly: AssemblyFileVersion(Microsoft.WindowsAzure.Commands.Common.AzurePowerShell.AssemblyFileVersion)]
diff --git a/src/Common/Commands.Common.Storage/Properties/Resources.Designer.cs b/src/Common/Commands.Common.Storage/Properties/Resources.Designer.cs
new file mode 100644
index 000000000000..1dd6d72ee692
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/Properties/Resources.Designer.cs
@@ -0,0 +1,81 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAzure.Commands.Common.Storage.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to [Anonymous].
+ ///
+ internal static string AnonymousAccountName {
+ get {
+ return ResourceManager.GetString("AnonymousAccountName", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to [SasToken].
+ ///
+ internal static string SasTokenAccountName {
+ get {
+ return ResourceManager.GetString("SasTokenAccountName", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Storage/Properties/Resources.resx b/src/Common/Commands.Common.Storage/Properties/Resources.resx
new file mode 100644
index 000000000000..429223e5b11b
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/Properties/Resources.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ [Anonymous]
+
+
+ [SasToken]
+
+
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Storage/StorageClientWrapper.cs b/src/Common/Commands.Common.Storage/StorageClientWrapper.cs
new file mode 100644
index 000000000000..5e0fc11e0d9c
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/StorageClientWrapper.cs
@@ -0,0 +1,132 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System;
+using System.Globalization;
+using System.IO;
+using Microsoft.WindowsAzure.Commands.Utilities.Common;
+using Microsoft.WindowsAzure.Management.Storage;
+using Microsoft.WindowsAzure.Management.Storage.Models;
+using Microsoft.WindowsAzure.Storage;
+using Microsoft.WindowsAzure.Storage.Auth;
+using Microsoft.WindowsAzure.Storage.Blob;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage
+{
+ ///
+ /// Wrapper class that encapsulates Blob functionality from the StorageClient API
+ ///
+ public class StorageClientWrapper : IStorageClientWrapper
+ {
+ public IStorageManagementClient StorageManagementClient { get; set; }
+
+ public Func CloudBlobClientFactory { get; set; }
+
+ public StorageClientWrapper(IStorageManagementClient storageManagementClient)
+ {
+ StorageManagementClient = storageManagementClient;
+ CloudBlobClientFactory = (uri, cred) => new CloudBlobClient(uri, cred);
+ }
+
+ public void DeletePackageFromBlob(string storageName, Uri packageUri)
+ {
+ StorageAccountGetKeysResponse keys = StorageManagementClient.StorageAccounts.GetKeys(storageName);
+ string storageKey = keys.PrimaryKey;
+ var storageService = StorageManagementClient.StorageAccounts.Get(storageName);
+ var blobStorageEndpoint = storageService.StorageAccount.Properties.Endpoints[0];
+ var credentials = new StorageCredentials(storageName, storageKey);
+ var client = new CloudBlobClient(blobStorageEndpoint, credentials);
+ ICloudBlob blob = client.GetBlobReferenceFromServer(packageUri);
+ blob.DeleteIfExists();
+ }
+
+ public Uri UploadFileToBlob(BlobUploadParameters parameters)
+ {
+ StorageAccountGetKeysResponse keys = StorageManagementClient.StorageAccounts.GetKeys(parameters.StorageName);
+ string storageKey = keys.PrimaryKey;
+ StorageAccountGetResponse storageService = StorageManagementClient.StorageAccounts.Get(parameters.StorageName);
+ Uri blobEndpointUri = storageService.StorageAccount.Properties.Endpoints[0];
+ return UploadFile(parameters.StorageName,
+ GeneralUtilities.CreateHttpsEndpoint(blobEndpointUri.ToString()),
+ storageKey, parameters);
+ }
+
+ private Uri UploadFile(string storageName, Uri blobEndpointUri, string storageKey, BlobUploadParameters parameters)
+ {
+ var credentials = new StorageCredentials(storageName, storageKey);
+ var client = new CloudBlobClient(blobEndpointUri, credentials);
+ string blobName = parameters.FileRemoteName;
+ if (string.IsNullOrEmpty(blobName))
+ {
+ blobName = string.Format(
+ CultureInfo.InvariantCulture,
+ "{0}_{1}",
+ DateTime.UtcNow.ToString("yyyyMMdd_HHmmss", CultureInfo.InvariantCulture),
+ Path.GetFileName(parameters.FileLocalPath));
+ }
+
+ CloudBlobContainer container = client.GetContainerReference(parameters.ContainerName);
+ var wasCreated = container.CreateIfNotExists();
+ if (wasCreated && parameters.ContainerPublic)
+ {
+ container.SetPermissions(new BlobContainerPermissions
+ {
+ PublicAccess = BlobContainerPublicAccessType.Blob
+ });
+ }
+
+ CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
+
+ if (blob.Exists())
+ {
+ if (parameters.OverrideIfExists)
+ {
+ blob.DeleteIfExists();
+ }
+ else
+ {
+ throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,
+ Commands.Common.Properties.Resources.BlobAlreadyExistsInTheAccount, blobName));
+ }
+ }
+
+ using (FileStream readStream = File.OpenRead(parameters.FileLocalPath))
+ {
+ blob.UploadFromStream(readStream, AccessCondition.GenerateEmptyCondition(), parameters.BlobRequestOptions);
+ }
+
+ blob = container.GetBlockBlobReference(blobName);
+
+ string sasContainerToken = string.Empty;
+
+ if (!parameters.ContainerPublic)
+ {
+ //Set the expiry time and permissions for the blob.
+ //Start time is specified as a few minutes in the past, to mitigate clock skew.
+ //The shared access signature will be valid immediately.
+ SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
+ sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
+ sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddHours(parameters.SasTokenDurationInHours);
+ sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
+
+ //Generate the shared access signature on the blob, setting the constraints directly on the signature.
+ sasContainerToken = blob.GetSharedAccessSignature(sasConstraints);
+ }
+
+ string fullUrl = client.BaseUri + parameters.ContainerName + client.DefaultDelimiter + blobName + sasContainerToken;
+
+ return new Uri(fullUrl);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Storage/StorageUtilities.cs b/src/Common/Commands.Common.Storage/StorageUtilities.cs
new file mode 100644
index 000000000000..69d5d4792319
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/StorageUtilities.cs
@@ -0,0 +1,79 @@
+using System;
+using Microsoft.WindowsAzure.Commands.Utilities.Common;
+using Microsoft.WindowsAzure.Management.Storage;
+using Microsoft.WindowsAzure.Storage;
+using Microsoft.WindowsAzure.Storage.Auth;
+using Microsoft.WindowsAzure.Storage.Blob;
+using Microsoft.WindowsAzure.Storage.Table;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Storage
+{
+ public class StorageUtilities
+ {
+ public static CloudStorageAccount GenerateCloudStorageAccount(StorageManagementClient storageClient, string accountName)
+ {
+ var storageServiceResponse = storageClient.StorageAccounts.Get(accountName);
+ var storageKeysResponse = storageClient.StorageAccounts.GetKeys(accountName);
+
+ Uri fileEndpoint = null;
+ Uri blobEndpoint = null;
+ Uri queueEndpoint = null;
+ Uri tableEndpoint = null;
+
+ if (storageServiceResponse.StorageAccount.Properties.Endpoints.Count >= 4)
+ {
+ fileEndpoint = GeneralUtilities.CreateHttpsEndpoint(storageServiceResponse.StorageAccount.Properties.Endpoints[3].ToString());
+ }
+
+ if (storageServiceResponse.StorageAccount.Properties.Endpoints.Count >= 3)
+ {
+ tableEndpoint = GeneralUtilities.CreateHttpsEndpoint(storageServiceResponse.StorageAccount.Properties.Endpoints[2].ToString());
+ queueEndpoint = GeneralUtilities.CreateHttpsEndpoint(storageServiceResponse.StorageAccount.Properties.Endpoints[1].ToString());
+ }
+
+ if (storageServiceResponse.StorageAccount.Properties.Endpoints.Count >= 1)
+ {
+ blobEndpoint = GeneralUtilities.CreateHttpsEndpoint(storageServiceResponse.StorageAccount.Properties.Endpoints[0].ToString());
+ }
+
+ return new CloudStorageAccount(
+ new StorageCredentials(storageServiceResponse.StorageAccount.Name, storageKeysResponse.PrimaryKey),
+ blobEndpoint,
+ queueEndpoint,
+ tableEndpoint,
+ fileEndpoint);
+ }
+
+ public static string GenerateTableStorageSasUrl(string connectionString, string tableName, DateTime expiryTime, SharedAccessTablePermissions permissions)
+ {
+ CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
+ CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
+ CloudTable tableReference = tableClient.GetTableReference(tableName);
+ tableReference.CreateIfNotExists();
+ var sasToken = tableReference.GetSharedAccessSignature(
+ new SharedAccessTablePolicy()
+ {
+ SharedAccessExpiryTime = expiryTime,
+ Permissions = permissions
+ });
+
+ return tableReference.Uri + sasToken;
+ }
+
+ public static string GenerateBlobStorageSasUrl(string connectionString, string blobContainerName, DateTime expiryTime, SharedAccessBlobPermissions permissions)
+ {
+ CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
+ CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
+ CloudBlobContainer blobContainer = blobClient.GetContainerReference(blobContainerName);
+ blobContainer.CreateIfNotExists();
+ var sasToken = blobContainer.GetSharedAccessSignature(
+ new SharedAccessBlobPolicy()
+ {
+ SharedAccessExpiryTime = expiryTime,
+ Permissions = permissions
+ });
+
+ return blobContainer.Uri + sasToken;
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Storage/WindowsAzureSubscriptionExtensions.cs b/src/Common/Commands.Common.Storage/WindowsAzureSubscriptionExtensions.cs
new file mode 100644
index 000000000000..fdeb4d022aeb
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/WindowsAzureSubscriptionExtensions.cs
@@ -0,0 +1,43 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using Microsoft.WindowsAzure.Commands.Common;
+using Microsoft.WindowsAzure.Commands.Common.Models;
+using Microsoft.WindowsAzure.Commands.Common.Storage;
+using Microsoft.WindowsAzure.Management.Storage;
+using Microsoft.WindowsAzure.Storage;
+
+namespace Microsoft.WindowsAzure.Commands.Utilities.Common
+{
+ public static class WindowsAzureSubscriptionExtensions
+ {
+ private static Dictionary storageAccountCache = new Dictionary();
+
+ public static CloudStorageAccount GetCloudStorageAccount(this AzureSubscription subscription)
+ {
+ if (subscription == null)
+ {
+ return null;
+ }
+
+ using (var storageClient = AzureSession.ClientFactory.CreateClient(subscription, AzureEnvironment.Endpoint.ServiceManagement))
+ {
+ return StorageUtilities.GenerateCloudStorageAccount(
+ storageClient, subscription.GetProperty(AzureSubscription.Property.StorageAccount));
+ }
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Storage/packages.config b/src/Common/Commands.Common.Storage/packages.config
new file mode 100644
index 000000000000..a594630f2a52
--- /dev/null
+++ b/src/Common/Commands.Common.Storage/packages.config
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Test/Commands.Common.Test.csproj b/src/Common/Commands.Common.Test/Commands.Common.Test.csproj
new file mode 100644
index 000000000000..733f8dc7bd88
--- /dev/null
+++ b/src/Common/Commands.Common.Test/Commands.Common.Test.csproj
@@ -0,0 +1,251 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {3B48A77B-5956-4A62-9081-92BA04B02B27}
+ Library
+ Properties
+ Microsoft.WindowsAzure.Commands.Common.Test
+ Microsoft.WindowsAzure.Commands.Common.Test
+ v4.5
+ 512
+
+ ..\..\
+ true
+ {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;TRACE
+ prompt
+ 4
+ true
+ true
+ false
+
+
+ bin\Release
+ TRACE;SIGN
+ true
+ pdbonly
+ AnyCPU
+ bin\Release\Common.Test.dll.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets
+ ;$(ProgramFiles)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules
+ true
+ MSSharedLibKey.snk
+ true
+ true
+ false
+
+
+
+ False
+ ..\..\packages\Microsoft.Azure.Management.Resources.2.7.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll
+ True
+
+
+ False
+ ..\..\packages\Hydra.HttpRecorder.1.0.5417.13285-prerelease\lib\net45\Microsoft.Azure.Utilities.HttpRecorder.dll
+
+
+ ..\..\packages\Microsoft.Data.Edm.5.6.0\lib\net40\Microsoft.Data.Edm.dll
+
+
+ ..\..\packages\Microsoft.Data.OData.5.6.0\lib\net40\Microsoft.Data.OData.dll
+
+
+ ..\..\packages\Microsoft.Data.Services.Client.5.6.0\lib\net40\Microsoft.Data.Services.Client.dll
+
+
+ False
+ ..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.11.10918.1222\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll
+
+
+ False
+ ..\..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.11.10918.1222\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll
+
+
+ False
+ ..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll
+
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Common.1.4.0\lib\net45\Microsoft.WindowsAzure.Common.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Common.1.4.0\lib\net45\Microsoft.WindowsAzure.Common.NetFramework.dll
+
+
+ ..\..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Management.2.1.0\lib\net40\Microsoft.WindowsAzure.Management.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Management.Compute.6.0.0\lib\net40\Microsoft.WindowsAzure.Management.Compute.dll
+
+
+ False
+ ..\..\packages\Microsoft.WindowsAzure.Management.Storage.3.1.0\lib\net40\Microsoft.WindowsAzure.Management.Storage.dll
+
+
+ False
+ ..\..\packages\WindowsAzure.Storage.4.0.0\lib\net40\Microsoft.WindowsAzure.Storage.dll
+
+
+ False
+ ..\..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll
+
+
+ False
+ ..\..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+ False
+ ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Extensions.dll
+
+
+ False
+ ..\..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Primitives.dll
+
+
+
+
+ ..\..\packages\System.Spatial.5.6.0\lib\net40\System.Spatial.dll
+
+
+
+
+
+
+
+ False
+ ..\..\packages\xunit.1.9.2\lib\net20\xunit.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ {65c3a86a-716d-4e7d-ab67-1db00b3bf72d}
+ Commands.Common.Storage
+
+
+ {5ee72c53-1720-4309-b54b-5fb79703195f}
+ Commands.Common
+
+
+ {c60342b1-47d3-4a0e-8081-9b97ce60b7af}
+ Commands.Profile
+
+
+
+
+ PublicResXFileCodeGenerator
+ Designer
+ Resources.Designer.cs
+
+
+
+
+
+ Designer
+
+
+
+
+ Designer
+
+
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Common/Commands.Common.Test/Common/AuthenticationFactoryTests.cs b/src/Common/Commands.Common.Test/Common/AuthenticationFactoryTests.cs
new file mode 100644
index 000000000000..3dd6a921c807
--- /dev/null
+++ b/src/Common/Commands.Common.Test/Common/AuthenticationFactoryTests.cs
@@ -0,0 +1,65 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System.Collections.Generic;
+using Xunit;
+using System;
+using Microsoft.WindowsAzure.Commands.Common.Factories;
+using Microsoft.WindowsAzure.Commands.Test.Utilities.Common;
+using Microsoft.WindowsAzure.Commands.Utilities.Common.Authentication;
+using Microsoft.WindowsAzure.Commands.Common.Models;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Test.Common
+{
+ public class AuthenticationFactoryTests
+ {
+ [Fact]
+ public void VerifySubscriptionTokenCacheRemove()
+ {
+ var authFactory = new AuthenticationFactory
+ {
+ TokenProvider = new MockAccessTokenProvider("testtoken", "testuser")
+ };
+
+ var subscriptionId = Guid.NewGuid();
+
+ var credential = authFactory.GetSubscriptionCloudCredentials(new Models.AzureContext
+ {
+ Environment = AzureEnvironment.PublicEnvironments["AzureCloud"],
+ Account = new AzureAccount
+ {
+ Id = "testuser",
+ Type = AzureAccount.AccountType.User,
+ Properties = new Dictionary
+ {
+ { AzureAccount.Property.Tenants, "123" }
+ }
+ },
+ Subscription = new AzureSubscription
+ {
+ Id = subscriptionId,
+ Properties = new Dictionary
+ {
+ { AzureSubscription.Property.Tenants, "123"}
+ }
+ }
+
+ });
+
+ Assert.True(credential is AccessTokenCredential);
+ Assert.Equal(subscriptionId, new Guid(((AccessTokenCredential)credential).SubscriptionId));
+
+ }
+ }
+}
diff --git a/src/Common/Commands.Common.Test/Common/ConversionUtilitiesTests.cs b/src/Common/Commands.Common.Test/Common/ConversionUtilitiesTests.cs
new file mode 100644
index 000000000000..ed098a0d1679
--- /dev/null
+++ b/src/Common/Commands.Common.Test/Common/ConversionUtilitiesTests.cs
@@ -0,0 +1,119 @@
+// ----------------------------------------------------------------------------------
+//
+// Copyright Microsoft Corporation
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ----------------------------------------------------------------------------------
+
+using System.Collections.Generic;
+using Microsoft.WindowsAzure.Commands.Utilities.Common;
+using Xunit;
+
+namespace Microsoft.WindowsAzure.Commands.Common.Test
+{
+ public class ConversionUtilitiesTests
+ {
+ [Fact]
+ public void DeserializeJsonWorksForSimpleCases()
+ {
+ const string json1 =
+ @"{
+ ""foo1"": ""bar1"",
+ ""foo2"": ""bar2"",
+ ""num"": 25,
+ ""address"":
+ {
+ ""streetAddress"": ""123 Main Str"",
+ ""city"": ""Some City"",
+ },
+ ""list"":
+ [
+ {
+ ""val1"": ""a"",
+ ""val2"": ""b""
+ },
+ {
+ ""val3"": ""c"",
+ ""val4"": ""d""
+ }
+ ]
+ }";
+
+ Dictionary result;
+ result = JsonUtilities.DeserializeJson(json1);
+ Assert.NotNull(result);
+ Assert.Equal(5, result.Count);
+ Assert.Equal(2, ((Dictionary)result["address"]).Count);
+ Assert.Equal(2, ((List