#!/usr/bin/perl use v5.14; use Authen::NTLM; use SOAP::Lite; my %cfg = ( host => 'sp.hostname.net:80', # must include port endpoint => 'http://sp.hostname.net/tasks/_vti_bin/lists.asmx', user => '\\user', # must have leading backslashes pass => 'Pa$$w0rd', ); # enable NTLMv2 in Authen::NTLM ntlmv2(1); # syntax shortening of SOAP::Data methods sub name { my ($name, $value) = @_; my $d = SOAP::Data->name($name); return $d->attr($value) if (ref $value eq 'HASH'); return $d->value($value) if (defined $value); return $d; #otherwise } sub value { SOAP::Data->value(@_) } my $soap = SOAP::Lite ->proxy($cfg{endpoint}, keep_alive => 1, credentials => [$cfg{host}, '', $cfg{user}, $cfg{pass}]) ->default_ns('http://schemas.microsoft.com/sharepoint/soap/') ->on_action(sub { $_[0] . $_[1] }) # change default SOAPAction header ->readable(1); # fetch the list my $list_name = '{B0101010-2323-3434-4545-565656565656}'; # Team tasks my $som = $soap->GetListItems( name(listName => $list_name), name(query => \value( name(Query => \value( name(OrderBy => \value( name('FieldRef' => {Name => 'Created', Ascending => 'False'}), )), )), )), name(rowLimit => 10) ); die $som->faultstring() if defined $som->fault(); my @results = $som->dataof('//GetListItemsResult/listitems/data/row'); say "ID;Deadline;Owner;Task"; foreach my $data (@results) { my $item = $data->attr; say join(';', @$item{qw( ows_ID ows_Deadline ows_Owner ows_Task )}); }