'Power off (stop) one or more virtual machines in a VM scale set. Note
that resources are still attached and you are getting charged for the
resources. Instead, use deallocate to release resources and avoid
charges.
:param resource_group_name: The name of the resource group.
:type resource_group_name: str
:param vm_scale_set_name: The name of the VM scale set.
:type vm_scale_set_name: str
:param instance_ids: The virtual machine scale set instance ids.
Omitting the virtual machine scale set instance ids will result in the
operation being performed on all virtual machines in the virtual
machine scale set.
:type instance_ids: list of str
:param dict custom_headers: headers that will be added to the request
:param bool raw: returns the direct response alongside the
deserialized response
:return:
:class:`AzureOperationPoller<msrestazure.azure_operation.AzureOperationPoller>`
instance that returns :class:`OperationStatusResponse
<azure.mgmt.compute.compute.v2017_03_30.models.OperationStatusResponse>`
or :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>` if
raw=true
:rtype:
:class:`AzureOperationPoller<msrestazure.azure_operation.AzureOperationPoller>`
or :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>`
:raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`'

def power_off(self, resource_group_name, vm_scale_set_name, instance_ids=None, custom_headers=None, raw=False, **operation_config):

    vm_instance_ids = None
    if (instance_ids is not None):
        vm_instance_ids = models.VirtualMachineScaleSetVMInstanceIDs(instance_ids=instance_ids)
    url = '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff'
    path_format_arguments = {'resourceGroupName': self._serialize.url('resource_group_name', resource_group_name, 'str'), 'vmScaleSetName': self._serialize.url('vm_scale_set_name', vm_scale_set_name, 'str'), 'subscriptionId': self._serialize.url('self.config.subscription_id', self.config.subscription_id, 'str')}
    url = self._client.format_url(url, **path_format_arguments)
    query_parameters = {}
    query_parameters['api-version'] = self._serialize.query('self.api_version', self.api_version, 'str')
    header_parameters = {}
    header_parameters['Content-Type'] = 'application/json;    charset=utf-8'
    if self.config.generate_client_request_id:
        header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    if custom_headers:
        header_parameters.update(custom_headers)
    if (self.config.accept_language is not None):
        header_parameters['accept-language'] = self._serialize.header('self.config.accept_language', self.config.accept_language, 'str')
    if (vm_instance_ids is not None):
        body_content = self._serialize.body(vm_instance_ids, 'VirtualMachineScaleSetVMInstanceIDs')
    else:
        body_content = None
    def long_running_send():
        request = self._client.post(url, query_parameters)
        return self._client.send(request, header_parameters, body_content, **operation_config)
    def get_long_running_status(status_link, headers=None):
        request = self._client.get(status_link)
        if headers:
            request.headers.update(headers)
        return self._client.send(request, header_parameters, **operation_config)
    def get_long_running_output(response):
        if (response.status_code not in [200, 202]):
            exp = CloudError(response)
            exp.request_id = response.headers.get('x-ms-request-id')
            raise exp
        deserialized = None
        if (response.status_code == 200):
            deserialized = self._deserialize('OperationStatusResponse', response)
        if raw:
            client_raw_response = ClientRawResponse(deserialized, response)
            return client_raw_response
        return deserialized
    if raw:
        response = long_running_send()
        return get_long_running_output(response)
    long_running_operation_timeout = operation_config.get('long_running_operation_timeout', self.config.long_running_operation_timeout)
    return AzureOperationPoller(long_running_send, get_long_running_output, get_long_running_status, long_running_operation_timeout)
